Nareshb92 commited on
Commit
0673269
·
1 Parent(s): 42448d9

Upload 43 files

Browse files
Files changed (44) hide show
  1. .gitattributes +1 -0
  2. app/img/animation.gif +3 -0
  3. app/img/arch.drawio +67 -0
  4. app/img/arch.png +0 -0
  5. app/img/screenshot1.png +0 -0
  6. app/img/screenshot2.png +0 -0
  7. app/img/screenshot3.png +0 -0
  8. app/img/screenshot4.png +0 -0
  9. app/src/.chroma/index/id_to_uuid_18500a7b-46d2-445b-8784-39e15ba7d6aa.pkl +3 -0
  10. app/src/.chroma/index/id_to_uuid_1f26b323-cf71-4c5f-8de2-d0b01755e071.pkl +3 -0
  11. app/src/.chroma/index/id_to_uuid_5cd68c7d-6197-40ca-b7ba-fdee86ae36cb.pkl +3 -0
  12. app/src/.chroma/index/id_to_uuid_8e6aa70e-03df-4edb-8ef5-da9c9fcae3a0.pkl +3 -0
  13. app/src/.chroma/index/id_to_uuid_98601f80-2812-460f-ac0a-961a6f41ad49.pkl +3 -0
  14. app/src/.chroma/index/id_to_uuid_aecd8ed4-2aee-463f-acc5-24060abeea9c.pkl +3 -0
  15. app/src/.chroma/index/id_to_uuid_c88e82f5-91b9-47eb-8627-d02fdcb0a76e.pkl +3 -0
  16. app/src/.chroma/index/index_18500a7b-46d2-445b-8784-39e15ba7d6aa.bin +3 -0
  17. app/src/.chroma/index/index_1f26b323-cf71-4c5f-8de2-d0b01755e071.bin +3 -0
  18. app/src/.chroma/index/index_5cd68c7d-6197-40ca-b7ba-fdee86ae36cb.bin +3 -0
  19. app/src/.chroma/index/index_8e6aa70e-03df-4edb-8ef5-da9c9fcae3a0.bin +3 -0
  20. app/src/.chroma/index/index_98601f80-2812-460f-ac0a-961a6f41ad49.bin +3 -0
  21. app/src/.chroma/index/index_aecd8ed4-2aee-463f-acc5-24060abeea9c.bin +3 -0
  22. app/src/.chroma/index/index_c88e82f5-91b9-47eb-8627-d02fdcb0a76e.bin +3 -0
  23. app/src/.chroma/index/index_metadata_18500a7b-46d2-445b-8784-39e15ba7d6aa.pkl +3 -0
  24. app/src/.chroma/index/index_metadata_1f26b323-cf71-4c5f-8de2-d0b01755e071.pkl +3 -0
  25. app/src/.chroma/index/index_metadata_5cd68c7d-6197-40ca-b7ba-fdee86ae36cb.pkl +3 -0
  26. app/src/.chroma/index/index_metadata_8e6aa70e-03df-4edb-8ef5-da9c9fcae3a0.pkl +3 -0
  27. app/src/.chroma/index/index_metadata_98601f80-2812-460f-ac0a-961a6f41ad49.pkl +3 -0
  28. app/src/.chroma/index/index_metadata_aecd8ed4-2aee-463f-acc5-24060abeea9c.pkl +3 -0
  29. app/src/.chroma/index/index_metadata_c88e82f5-91b9-47eb-8627-d02fdcb0a76e.pkl +3 -0
  30. app/src/.chroma/index/uuid_to_id_18500a7b-46d2-445b-8784-39e15ba7d6aa.pkl +3 -0
  31. app/src/.chroma/index/uuid_to_id_1f26b323-cf71-4c5f-8de2-d0b01755e071.pkl +3 -0
  32. app/src/.chroma/index/uuid_to_id_5cd68c7d-6197-40ca-b7ba-fdee86ae36cb.pkl +3 -0
  33. app/src/.chroma/index/uuid_to_id_8e6aa70e-03df-4edb-8ef5-da9c9fcae3a0.pkl +3 -0
  34. app/src/.chroma/index/uuid_to_id_98601f80-2812-460f-ac0a-961a6f41ad49.pkl +3 -0
  35. app/src/.chroma/index/uuid_to_id_aecd8ed4-2aee-463f-acc5-24060abeea9c.pkl +3 -0
  36. app/src/.chroma/index/uuid_to_id_c88e82f5-91b9-47eb-8627-d02fdcb0a76e.pkl +3 -0
  37. app/src/__pycache__/llm.cpython-311.pyc +0 -0
  38. app/src/app.py +41 -0
  39. app/src/docs/HR_Leave_policy.txt +203 -0
  40. app/src/docs/HR_Work_from_home.txt +37 -0
  41. app/src/docs/Hr_induction.txt +64 -0
  42. app/src/llm.py +71 -0
  43. app/src/requirements.txt +125 -0
  44. app/src/templates/index.html +273 -0
.gitattributes CHANGED
@@ -34,3 +34,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  img/animation.gif filter=lfs diff=lfs merge=lfs -text
 
 
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  img/animation.gif filter=lfs diff=lfs merge=lfs -text
37
+ app/img/animation.gif filter=lfs diff=lfs merge=lfs -text
app/img/animation.gif ADDED

Git LFS Details

  • SHA256: 805d590f6f0a1df52fd3149d04c1d413f8f16b69a3cad0cd04bdd3a41d5f9a34
  • Pointer size: 132 Bytes
  • Size of remote file: 4.5 MB
app/img/arch.drawio ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <mxfile host="app.diagrams.net" modified="2023-04-25T11:03:23.984Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" etag="Ujvsfy_0FGNKRbeo-w6n" version="21.2.1" type="device">
2
+ <diagram name="Page-1" id="na7zzv-fnRlMRzOz7OdL">
3
+ <mxGraphModel dx="1001" dy="731" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
4
+ <root>
5
+ <mxCell id="0" />
6
+ <mxCell id="1" parent="0" />
7
+ <mxCell id="4e8PmtW7Q3v7DfF4d8d9-4" value="LangChain" style="outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=12;fontStyle=0;strokeColor=#858B94;fillColor=#f5fff9;verticalAlign=top;align=center;fontColor=#858B94;dashed=1;spacingTop=3;" parent="1" vertex="1">
8
+ <mxGeometry x="50" y="170" width="480" height="90" as="geometry" />
9
+ </mxCell>
10
+ <mxCell id="4e8PmtW7Q3v7DfF4d8d9-2" value="OpenAI" style="outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=12;fontStyle=0;strokeColor=#879196;fillColor=#FFFFF2;verticalAlign=top;align=center;fontColor=#879196;dashed=1;spacingTop=3;" parent="1" vertex="1">
11
+ <mxGeometry x="290" y="270" width="239.99" height="140" as="geometry" />
12
+ </mxCell>
13
+ <mxCell id="4e8PmtW7Q3v7DfF4d8d9-1" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/svg+xml,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHJvbGU9ImltZyIgdmlld0JveD0iMCAwIDI0IDI0IiBoZWlnaHQ9IjgwMHB4IiB3aWR0aD0iODAwcHgiIGZpbGw9IiMwMDAwMDAiPjx0aXRsZT5PcGVuQUkgaWNvbjwvdGl0bGU+PHBhdGggZD0iTTIyLjI4MTkgOS44MjExYTUuOTg0NyA1Ljk4NDcgMCAwIDAtLjUxNTctNC45MTA4IDYuMDQ2MiA2LjA0NjIgMCAwIDAtNi41MDk4LTIuOUE2LjA2NTEgNi4wNjUxIDAgMCAwIDQuOTgwNyA0LjE4MThhNS45ODQ3IDUuOTg0NyAwIDAgMC0zLjk5NzcgMi45IDYuMDQ2MiA2LjA0NjIgMCAwIDAgLjc0MjcgNy4wOTY2IDUuOTggNS45OCAwIDAgMCAuNTExIDQuOTEwNyA2LjA1MSA2LjA1MSAwIDAgMCA2LjUxNDYgMi45MDAxQTUuOTg0NyA1Ljk4NDcgMCAwIDAgMTMuMjU5OSAyNGE2LjA1NTcgNi4wNTU3IDAgMCAwIDUuNzcxOC00LjIwNTggNS45ODk0IDUuOTg5NCAwIDAgMCAzLjk5NzctMi45MDAxIDYuMDU1NyA2LjA1NTcgMCAwIDAtLjc0NzUtNy4wNzI5em0tOS4wMjIgMTIuNjA4MWE0LjQ3NTUgNC40NzU1IDAgMCAxLTIuODc2NC0xLjA0MDhsLjE0MTktLjA4MDQgNC43NzgzLTIuNzU4MmEuNzk0OC43OTQ4IDAgMCAwIC4zOTI3LS42ODEzdi02LjczNjlsMi4wMiAxLjE2ODZhLjA3MS4wNzEgMCAwIDEgLjAzOC4wNTJ2NS41ODI2YTQuNTA0IDQuNTA0IDAgMCAxLTQuNDk0NSA0LjQ5NDR6bS05LjY2MDctNC4xMjU0YTQuNDcwOCA0LjQ3MDggMCAwIDEtLjUzNDYtMy4wMTM3bC4xNDIuMDg1MiA0Ljc4MyAyLjc1ODJhLjc3MTIuNzcxMiAwIDAgMCAuNzgwNiAwbDUuODQyOC0zLjM2ODV2Mi4zMzI0YS4wODA0LjA4MDQgMCAwIDEtLjAzMzIuMDYxNUw5Ljc0IDE5Ljk1MDJhNC40OTkyIDQuNDk5MiAwIDAgMS02LjE0MDgtMS42NDY0ek0yLjM0MDggNy44OTU2YTQuNDg1IDQuNDg1IDAgMCAxIDIuMzY1NS0xLjk3MjhWMTEuNmEuNzY2NC43NjY0IDAgMCAwIC4zODc5LjY3NjVsNS44MTQ0IDMuMzU0My0yLjAyMDEgMS4xNjg1YS4wNzU3LjA3NTcgMCAwIDEtLjA3MSAwbC00LjgzMDMtMi43ODY1QTQuNTA0IDQuNTA0IDAgMCAxIDIuMzQwOCA3Ljg3MnptMTYuNTk2MyAzLjg1NThMMTMuMTAzOCA4LjM2NCAxNS4xMTkyIDcuMmEuMDc1Ny4wNzU3IDAgMCAxIC4wNzEgMGw0LjgzMDMgMi43OTEzYTQuNDk0NCA0LjQ5NDQgMCAwIDEtLjY3NjUgOC4xMDQydi01LjY3NzJhLjc5Ljc5IDAgMCAwLS40MDctLjY2N3ptMi4wMTA3LTMuMDIzMWwtLjE0Mi0uMDg1Mi00Ljc3MzUtMi43ODE4YS43NzU5Ljc3NTkgMCAwIDAtLjc4NTQgMEw5LjQwOSA5LjIyOTdWNi44OTc0YS4wNjYyLjA2NjIgMCAwIDEgLjAyODQtLjA2MTVsNC44MzAzLTIuNzg2NmE0LjQ5OTIgNC40OTkyIDAgMCAxIDYuNjgwMiA0LjY2ek04LjMwNjUgMTIuODYzbC0yLjAyLTEuMTYzOGEuMDgwNC4wODA0IDAgMCAxLS4wMzgtLjA1NjdWNi4wNzQyYTQuNDk5MiA0LjQ5OTIgMCAwIDEgNy4zNzU3LTMuNDUzN2wtLjE0Mi4wODA1TDguNzA0IDUuNDU5YS43OTQ4Ljc5NDggMCAwIDAtLjM5MjcuNjgxM3ptMS4wOTc2LTIuMzY1NGwyLjYwMi0xLjQ5OTggMi42MDY5IDEuNDk5OHYyLjk5OTRsLTIuNTk3NCAxLjQ5OTctMi42MDY3LTEuNDk5N1oiLz48L3N2Zz4=;" parent="1" vertex="1">
14
+ <mxGeometry x="384.99" y="320" width="60" height="60" as="geometry" />
15
+ </mxCell>
16
+ <mxCell id="4e8PmtW7Q3v7DfF4d8d9-8" value="Custom Documentations" style="outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=12;fontStyle=0;strokeColor=#879196;fillColor=#F7FEFF;verticalAlign=top;align=center;fontColor=#879196;dashed=1;spacingTop=3;" parent="1" vertex="1">
17
+ <mxGeometry x="49.989999999999995" y="270" width="230.01" height="140" as="geometry" />
18
+ </mxCell>
19
+ <mxCell id="4e8PmtW7Q3v7DfF4d8d9-9" value="" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn0.iconfinder.com/data/icons/logos-brands/24/logo_brand_brands_logos_docs_google-128.png" parent="1" vertex="1">
20
+ <mxGeometry x="202.99" y="309.5" width="38" height="38" as="geometry" />
21
+ </mxCell>
22
+ <mxCell id="4e8PmtW7Q3v7DfF4d8d9-10" value="" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn0.iconfinder.com/data/icons/logos-brands/24/logo_brand_brands_logos_docs_google-128.png" parent="1" vertex="1">
23
+ <mxGeometry x="164.99" y="309.5" width="38" height="38" as="geometry" />
24
+ </mxCell>
25
+ <mxCell id="4e8PmtW7Q3v7DfF4d8d9-11" value="" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn0.iconfinder.com/data/icons/logos-brands/24/logo_brand_brands_logos_docs_google-128.png" parent="1" vertex="1">
26
+ <mxGeometry x="126.99000000000001" y="309.5" width="38" height="38" as="geometry" />
27
+ </mxCell>
28
+ <mxCell id="4e8PmtW7Q3v7DfF4d8d9-12" value="" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn0.iconfinder.com/data/icons/logos-brands/24/logo_brand_brands_logos_docs_google-128.png" parent="1" vertex="1">
29
+ <mxGeometry x="202.99" y="352.5" width="38" height="38" as="geometry" />
30
+ </mxCell>
31
+ <mxCell id="4e8PmtW7Q3v7DfF4d8d9-13" value="" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn0.iconfinder.com/data/icons/logos-brands/24/logo_brand_brands_logos_docs_google-128.png" parent="1" vertex="1">
32
+ <mxGeometry x="164.99" y="352.5" width="38" height="38" as="geometry" />
33
+ </mxCell>
34
+ <mxCell id="4e8PmtW7Q3v7DfF4d8d9-14" value="" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn0.iconfinder.com/data/icons/logos-brands/24/logo_brand_brands_logos_docs_google-128.png" parent="1" vertex="1">
35
+ <mxGeometry x="126.99000000000001" y="352.5" width="38" height="38" as="geometry" />
36
+ </mxCell>
37
+ <mxCell id="4e8PmtW7Q3v7DfF4d8d9-15" value="" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn0.iconfinder.com/data/icons/logos-brands/24/logo_brand_brands_logos_docs_google-128.png" parent="1" vertex="1">
38
+ <mxGeometry x="88.99000000000001" y="309.5" width="38" height="38" as="geometry" />
39
+ </mxCell>
40
+ <mxCell id="4e8PmtW7Q3v7DfF4d8d9-16" value="" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn0.iconfinder.com/data/icons/logos-brands/24/logo_brand_brands_logos_docs_google-128.png" parent="1" vertex="1">
41
+ <mxGeometry x="88.99000000000001" y="352.5" width="38" height="38" as="geometry" />
42
+ </mxCell>
43
+ <mxCell id="4e8PmtW7Q3v7DfF4d8d9-17" value="&lt;font style=&quot;font-size: 36px;&quot;&gt;🦜️🔗&lt;/font&gt;" style="text;whiteSpace=wrap;html=1;" parent="1" vertex="1">
44
+ <mxGeometry x="108.12" y="182.5" width="113.75" height="65" as="geometry" />
45
+ </mxCell>
46
+ <mxCell id="4e8PmtW7Q3v7DfF4d8d9-26" value="Flask" style="outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=12;fontStyle=0;strokeColor=#858B94;fillColor=#FFF0F0;verticalAlign=top;align=center;fontColor=#858B94;dashed=1;spacingTop=3;" parent="1" vertex="1">
47
+ <mxGeometry x="50" y="69.99999999999999" width="480" height="90" as="geometry" />
48
+ </mxCell>
49
+ <mxCell id="4e8PmtW7Q3v7DfF4d8d9-25" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/svg+xml,PHN2ZyB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWw6c3BhY2U9InByZXNlcnZlIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgaGVpZ2h0PSI4MDBweCIgd2lkdGg9IjgwMHB4IiB2ZXJzaW9uPSIxLjEiIGZpbGw9IiMwMDAwMDAiPiYjeGE7JiN4YTs8ZyBpZD0iZTZjNmI1M2QzYzgxNjBiMjJkYWQzNWEwZjcxMDNlY2MiPiYjeGE7JiN4YTs8cGF0aCBkPSJNMTQ1Ljk3MywxMjQuNDgyYy0xLjc2Ni0xNS4yOTksMTIuMDAzLTguODE0LDEwLjI0NCwwLjQxJiMxMDsmIzk7JiM5O0MxNTMuNjMzLDEyNy4zNSwxNDguODYsMTI1LjMzNCwxNDUuOTczLDEyNC40ODJ6IE0xNjIuMzYzLDEyMS42MTNjMy40NjgtMC4zNTQsNi43NzQtMC44NzQsNy43ODctMy42ODcmIzEwOyYjOTsmIzk7Yy00Ljc5Ny0yLjk1Ny0xMS45NjUsNC4zMzktOS4wMTYsNy43ODdDMTYyLjc3MSwxMjUuNTc0LDE2MS4zMjMsMTIyLjM1MSwxNjIuMzYzLDEyMS42MTN6IE0xMTYuNDY4LDEzMS4wMzgmIzEwOyYjOTsmIzk7YzIuODg4LTEuMzQzLDcuNjMzLTAuODM2LDkuMDE2LTMuNjg3Yy04LjU5Ni0yLjk5NC0yNC4wNzYtMC43ODQtMjYuNjM4LDQuOTE3QzEwNS4zOTksMTMxLjg2MywxMTAuODc5LDEyNi42NjMsMTE2LjQ2OCwxMzEuMDM4eiYjMTA7JiM5OyYjOTsgTTk3LjIwNywxMzIuNjc5Yy0xLjg2Mi0wLjM5MS0yLjU4LDEuNzI0LTEuNjM4LDIuODY3Qzk3LjAyNCwxMzUuNDk4LDk3LjIxOCwxMzQuMTksOTcuMjA3LDEzMi42Nzl6IE05Mi42OTksMTQwLjg3NSYjMTA7JiM5OyYjOTtjLTAuMjYyLTMuOTA5LTkuNzE4LTcuMDMtMTAuNjUzLTEuNjM5QzgyLjg2NCwxNDIuMjk3LDkwLjQ5MSwxNDQuMjY2LDkyLjY5OSwxNDAuODc1eiBNNzYuNzE5LDEzNy4xODgmIzEwOyYjOTsmIzk7Yy0xLjk1MywwLjA5MS0yLjk1NywxLjE0Mi00LjA5OSwyLjA0OEM3NC4xMDYsMTQwLjEwMiw3Ny4zOTgsMTM5Ljc5Miw3Ni43MTksMTM3LjE4OHogTTcxLjgwMywxNDguMjUmIzEwOyYjOTsmIzk7YzcuMjE4LTAuNTA3LDkuNDE1LDYuMTMsMTUuNTY5LDUuMzI3Qzg4LjUxOSwxNDYuNDMzLDczLjgzNywxMzYuNjA2LDcxLjgwMywxNDguMjV6IE0xNjkuMzI5LDE4My44OTkmIzEwOyYjOTsmIzk7Yy0yLjE1Mi03LjE0Miw0LjQzOC0xMy4yNzIsMC40MDktMTguODUxYy01LjU3OCwwLjQ0NS0xMC40MDIsMjYuMzM0LTIuNDU4LDI2LjIzYzUuNzA0LTAuMDc5LDcuNzE1LTE1LjczOCw4LjE5NC0yMC44OTgmIzEwOyYjOTsmIzk7QzE3MS4yOTgsMTcyLjc1NCwxNzMuMTE3LDE4MS4xMzIsMTY5LjMyOSwxODMuODk5eiBNMTAwLjg5NiwxODEuMDM0YzAuMTI0LTEuMDgzLTAuNTY4LTEuMzQ3LTEuNjM5LTEuMjMzJiMxMDsmIzk7JiM5O0M5OS4yODQsMTgwLjkwNywxMDAuMTkzLDE4MS43NzIsMTAwLjg5NiwxODEuMDM0eiBNMTIwLjk3NiwxOTIuOTE3YzAuMDc5LTIuNTM5LTAuMDIxLTQuODk3LTIuMDQ4LTUuMzI3JiMxMDsmIzk7JiM5O2MtMS41NDMtMC4xNzUtMS40NTEsMS4yODEtMi40NiwxLjY0MUMxMTcuMDMxLDE5MS4zOTcsMTE4LjE3NSwxOTIuOTg4LDEyMC45NzYsMTkyLjkxN3ogTTEwMS4zMDYsMjA2LjAzMSYjMTA7JiM5OyYjOTtjNy44NTcsMC44ODQsMTMuMTE4LDYuNTUyLDIwLjQ4OSw2LjU1NGMtNS44NzgtMy45NTctMTEuOTg1LTcuNjgzLTIxLjMwOS04LjE5NEMxMDAuMTg5LDIwNS41MDksMTAxLjMsMjA1LjIxNiwxMDEuMzA2LDIwNi4wMzF6JiMxMDsmIzk7JiM5OyBNMTYzLjE4MywyMTIuMTc3Yy0wLjYxMS0yLjgwNS0xLjgyOC01LjAwNS0zLjI3Ny02Ljk2OEMxNjAuNDM5LDIwOC4wODksMTYxLjE3NCwyMTAuNzY4LDE2My4xODMsMjEyLjE3N3ogTTExOC4xMDYsMjIxLjE5MSYjMTA7JiM5OyYjOTtjLTUuMTQzLTYuODgyLTEzLjMzNy0xMi44NzktMjIuNTM3LTE0LjM0M0M5Ni44NjgsMjE3Ljg0MSwxMDkuMDg4LDIxNy45MiwxMTguMTA2LDIyMS4xOTF6IE0xMDQuMTc1LDIyMy42NDgmIzEwOyYjOTsmIzk7Yy0zLjUxMi01LjkxMS05LjUzMy05LjMxNy0xNi44MDMtMTEuNDcxQzkxLjQ1OCwyMTcuMjU1LDk1LjIwMSwyMjQuODIzLDEwNC4xNzUsMjIzLjY0OHogTTg1LjMyNCwyMTcuOTE0JiMxMDsmIzk7JiM5O2MxLjM5OSwyLjQyOSw0LjkxNiw0LjkxMiw0LjA5OSw4LjE5NWMtMy41OTMtMS4wNS01LjM0LTMuOTQ5LTkuMDE2LTQuOTE3YzEuOTUyLDIuNzExLDkuNDAyLDE0LjcyOSwxMy45MzEsMTQuMzQ1JiMxMDsmIzk7JiM5O2MyLjg5MS0wLjI1LDQuMTk4LTMuNDQxLDMuNjg4LTguNjA2Qzk1LjgxMSwyMjIuMTc2LDg4Ljc2LDIyMC4wNzgsODUuMzI0LDIxNy45MTR6IE0xMDYuMjIzLDIyOC41NjgmIzEwOyYjOTsmIzk7YzAuOTExLDIuNTA1LDEuMjMxLDUuNTk4LDQuNTA5LDUuNzM1QzExMC4xNzQsMjMxLjQ0OCwxMDguNTA2LDIyOS42OTksMTA2LjIyMywyMjguNTY4eiBNMTAzLjM1NCwyMjkuNzk5JiMxMDsmIzk7JiM5O2MtMS41MjgtMC4xNjctMi40MDMsMC4zMjQtMi40NTcsMS42MzZjMC40NTksMC4wOSwwLjYzOCwwLjQ1NCwwLjgxOCwwLjgxOUMxMDMuMDI1LDIzMi4yMDMsMTAzLjUyMSwyMzEuMzI3LDEwMy4zNTQsMjI5Ljc5OXomIzEwOyYjOTsmIzk7IE0xNzMuNDI3LDIzOS4yMjJjMC40MjctMi4zMTYsMC44NjEtNi43NzgsMC05LjAxNkMxNzIuOTAxLDIzMi41MDgsMTcwLjkyMiwyMzcuNjg2LDE3My40MjcsMjM5LjIyMnogTTE0NC43NDMsMjMwLjYxNiYjMTA7JiM5OyYjOTtjMC4zMTMsMi40MjItMC44NTgsNi4zMjMsMS4yMjksNi45N0MxNDYuMDYzLDIzNS43OTMsMTQ2LjQ4MSwyMzEuNzU1LDE0NC43NDMsMjMwLjYxNnogTTE2NC4wMDIsMjQwLjA0MiYjMTA7JiM5OyYjOTtjLTEuMTg5LTEuMDU0LTIuODk1LDAuNTM5LTMuNjg4LTAuNDA4Yy0wLjgzOC0yLjcxMy0wLjQ5MS02LjYxLTIuODY4LTcuNzg3Yy0wLjI3MSwwLTAuNTQ2LDAtMC44MTgsMCYjMTA7JiM5OyYjOTtjLTMuMzc1LDYuOTktMy4wNDIsMjIuMDA3LDIuODY3LDI1LjgxNGMxLjExNiwxLjg5MSwxLjIyNSw0Ljc4Nyw0LjA5OCw0LjkyYzIuMzYyLTEuODc1LDIuOTQyLTUuNTI0LDMuMjc5LTkuNDI4JiMxMDsmIzk7JiM5O0MxNjEuNzQzLDI1Mi4wNzYsMTY2LjUyMSwyNDMuMjM1LDE2NC4wMDIsMjQwLjA0MnogTTE3Ni4yOTcsMjQ0LjU0N2MwLjUwNS0zLjYyOCwzLjYwNy04LjkwNSwxLjIyOS0xMi43JiMxMDsmIzk7JiM5O0MxNzYuNzQxLDIzNS40MzgsMTc1LjI1NSwyNDAuNDk5LDE3Ni4yOTcsMjQ0LjU0N3ogTTEwNC4xNzUsMjQ3LjgzYzAuNjUzLTEuODczLDAuMTQtNS4wNS0xLjIzLTYuMTQ4JiMxMDsmIzk7JiM5O0MxMDEuOTg5LDI0My40NzYsMTAxLjQzMywyNDcuNjA4LDEwNC4xNzUsMjQ3LjgzeiBNMTExLjU1LDI0OS40NjdjMS42NTUsMS4wNzcsMS43ODIsMy42OCw0LjA5OSw0LjA5OCYjMTA7JiM5OyYjOTtDMTE4LjUzMiwyNDkuODg1LDExMy4wNjMsMjQzLjM5OSwxMTEuNTUsMjQ5LjQ2N3ogTTE4MS42MjMsMjU3LjY2MWMwLjAwMywxLjI1Ni0xLjY0MywyLjk3NC0wLjQwOSw0LjA5NyYjMTA7JiM5OyYjOTtDMTgxLjQ1MSwyNjAuNzQzLDE4Mi42OTgsMjU4LjYzMSwxODEuNjIzLDI1Ny42NjF6IE0xODUuMzEsMjczLjY0M2MtMC4wMTctMS44OTIsMC4yMzEtNC4wNS0wLjgxOC00LjkxNSYjMTA7JiM5OyYjOTtDMTg0LjMwOCwyNzAuMTg3LDE4My4yMjcsMjczLjQxOCwxODUuMzEsMjczLjY0M3ogTTEzMy4yNjksMjkwLjQ0N2MwLjI0MywxLjUyNiwwLjQ5MiwzLjA1NywyLjA0OCwzLjI3NyYjMTA7JiM5OyYjOTtDMTM2LjMyMiwyOTIuMzE4LDEzNS41OCwyODkuODI4LDEzMy4yNjksMjkwLjQ0N3ogTTE1MS43MDksMjkyLjQ5N2MwLjU3LDEuMDgyLDIuMjA4LDMuMjMxLDMuMjc3LDIuNDU0JiMxMDsmIzk7JiM5O0MxNTQuMDM4LDI5NC4yNTIsMTUyLjk0NCwyOTEuNTUsMTUxLjcwOSwyOTIuNDk3eiBNMTkwLjYzNywyOTcuMDA1Yy0xLjE1MSw0Ljg3OSwxLjU3NCw5LjMyNCwzLjY4OSwxMi4yOTMmIzEwOyYjOTsmIzk7QzE5NS4xOTIsMzA0LjU0MSwxOTUuMTExLDI5Ny43MjksMTkwLjYzNywyOTcuMDA1eiBNMjAwLjg4NCwzMjguNTUyYzAuNjE5LTEuMjM5LDAuODM4LTUuMDU3LTAuNDEtNS43MyYjMTA7JiM5OyYjOTtDMTk5LjM5NSwzMjQuMzAyLDE5OC40MzMsMzI3Ljg0NSwyMDAuODg0LDMyOC41NTJ6IE0yMTkuMzIsMzQ4LjIyNmMtMC41OTMtMy4wMTEtMi45NTItNi4yNjMtNS4zMjUtNi4xNSYjMTA7JiM5OyYjOTtDMjE0LjgyNSwzNDUuMDY5LDIxNC45NjksMzQ4Ljc1NCwyMTkuMzIsMzQ4LjIyNnogTTIyMy4wMTIsMzUzLjk2MWMwLjAxNywxLjg5Ni0wLjIyOSw0LjA1OSwwLjgxOCw0LjkxNSYjMTA7JiM5OyYjOTtDMjIzLjg4MywzNTYuOTE3LDIyMy44NTUsMzU1LjAyOSwyMjMuMDEyLDM1My45NjF6IE04Ny43ODIsMzU0LjM3MmMwLjAwNiwxLjUwMSwwLjgwOSwyLjE5NiwxLjY0MSwyLjg2OSYjMTA7JiM5OyYjOTtDODkuMjU5LDM1NS44OTgsODkuMDY3LDM1NC41OTMsODcuNzgyLDM1NC4zNzJ6IE0yMzcuNzY0LDM3Ni45MDdjLTEuMDA5LTcuNzI3LTUuMDczLTEyLjQwNC0xMC4yNDQtMTUuOTc3JiMxMDsmIzk7JiM5O0MyMjguMjYsMzY4LjkyNywyMzIuMTc5LDM3My43NTUsMjM3Ljc2NCwzNzYuOTA3eiBNMzAzLjc0LDQxNy40NzhjLTAuMjQ5LTAuMjMyLTEuOTQ2LTAuOTU2LTIuMDUsMCYjMTA7JiM5OyYjOTtDMzAyLjMwNiw0MTcuOTUyLDMwMy40MTYsNDE4LjkxNywzMDMuNzQsNDE3LjQ3OHogTTUxMS41MDEsNDQ3LjgwMmMwLDEuNTA2LDAsMy4wMDMsMCw0LjUwOGMtMC42NjYsMS4zODUtMC44ODIsMy4yMTUtMS4yMzEsNC45MTYmIzEwOyYjOTsmIzk7Yy0xMS4zOTUsNy4zMTgtMzIuODAzLDQuNjI0LTQyLjIwOSwxMy45MzVjLTE2LjQ5Ny04Ljg4Ny0zMS44MjksNS4xMTEtNDkuMTcsNi41NTljLTIuODY1LDAuMjM2LTYuMDUxLTAuMjQxLTkuMDIxLDAmIzEwOyYjOTsmIzk7Yy0xMC4yNDYsMC44MjctMjAuMjUyLDMuMjIzLTMwLjczMSw0LjA5NmMtMTAuNzQ1LDAuODk1LTIxLjUxMiwxLjU1MS0zMi43ODEsMi4wNWMtNC4xMDEsMC04LjE5NiwwLTEyLjI5MywwJiMxMDsmIzk7JiM5O2MtNTAuODI1LTIuNjY5LTEwMS4wNzctOS41MDYtMTM4LjUwOC0yNi4yMjhjLTE4LjY2MS04LjMzOC0zNS44MzgtMTguNTY3LTUxLjYzMi0zMC43MzVjLTE1LjM3LTExLjgzNS0zMS4xNDctMjQuOTkzLTQyLjIxLTM5Ljc0NyYjMTA7JiM5OyYjOTtjLTExLjc3OC0xNS43MTEtMjMuNTYyLTMwLjk4OS0zNC4wMTItNDguMzUyYy0xMC4wODEtMTYuNzU5LTE5LjUwNC0zNC40MTItMjcuODY0LTU0LjA5NCYjMTA7JiM5OyYjOTtjLTguMjQ3LTE5LjQwOC0xNC4xMjMtMzguNjEzLTE5LjY3Mi02Mi4yODdjLTMuNjI3LTE1LjQ4NC03LjQ1NS0zMy4wMTUtMTMuOTMyLTQ3LjUzNGMtMi41MjItNS42NTQtNS40NTgtMTAuMjgyLTUuNzM2LTE1LjU3NCYjMTA7JiM5OyYjOTtjMC0xLjIyNywwLTIuNDYsMC0zLjY4N2MyLjAyMS0xNy4yMTIsMTUuNDA3LTI3LjIwMywzMS4xNDMtMzEuOTY1YzMuOTQtMS4xOTEsNy43NzEtMi4zMjksMTEuNDc0LTQuNTA4JiMxMDsmIzk7JiM5O2MwLjI0MS0wLjEzOSwyLjYwMi0wLjM4LDEuNjQxLTEuNjM4Yy03LjAxMS0xLjY4Ny0xMi43NzksOC42MzUtMjAuNDg5LDUuNzM3Yy02Ljg0NS0yLjU3NC0yLjkwNC0xMy4xNzIsNC41MDgtMTYuMzkxJiMxMDsmIzk7JiM5O2MzLjQ2LTEuNTAzLDEwLjMzLTEuODk0LDEzLjUyMS0zLjY4OGM1LjUwMi0zLjA5Miw3Ljk5OS05LjYyNSw2Ljk2OC0xNS41NzJjLTAuNjExLTMuNTE0LTQuMjU4LTUuMzY0LTQuMDk4LTguMTk2JiMxMDsmIzk7JiM5O2MwLjIyNC0zLjk0OSw3LjI4NS03LjM4MywxMC42NTMtOS44MzVjNC4xMjEtMi45OTksOC45OTktNi43NDUsOC42MDYtMTEuNDc0Yy0wLjQxNC00Ljk0LTYuMjI0LTYuNTE0LTkuMDE2LTEwLjI0NCYjMTA7JiM5OyYjOTtDNTEuMDI3LDQyLDUwLjMzMiwzMy4yNSw1Ny40NTgsMjkuODIxYzcuNDcxLTMuNTk1LDIxLjM5LTEuNjM2LDIyLjk0OSw3Ljc4N2MxLjM3NCw4LjMwNS00LjUyMiwxMS40NjktMi4wNTEsMTcuNjImIzEwOyYjOTsmIzk7YzQuNjA0LDExLjQ0Niw0MC40MDktNi42NzIsMzEuNTU2LDE3LjIxMmM3Ljg3NCwxMi4zNDMsMzguNjQ1LDEuNzg0LDM5LjMzOSwyMS4zMDljMTIuODM0LDAuMjU4LDE4LjczMiw5Ljk5NywyOS4wOTQsMTMuOTMzJiMxMDsmIzk7JiM5O2MyLjc3NywxLjA1NCw2LjA4NCwxLjA1NCw5LjAxNiwyLjA0OGMxNy40NzYsNS45NCwzOS4xMzIsMTIuMzEyLDQ2LjMwNSwyOS4wOTVjLTYuNDgyLDQuMzY3LTE1LjMyOCwxLjQ0My0yMi45NDYtMS4yMjkmIzEwOyYjOTsmIzk7Yy02LjYyNy0yLjMyNy0xNi4yODctNi45MzUtMjIuOTQ5LTQuMDk5Yy02LjYwNSwyLjgxMy02LjI1MiwxNC4wOTgtNS4zMjcsMjUuNDA1YzIuNDYsMzAuMTAyLDMuOTAzLDYxLjE1MSw4LjE5NCw4OC4xMDQmIzEwOyYjOTsmIzk7YzUuOTkzLDM3LjYyMywxOC44MDMsNjcuNzU2LDM2Ljg4Myw5MS4zODRjMTcuNDksMjIuODU5LDM4LjAzNyw0Ni43OTYsNjQuNzQzLDYzLjUxOGMyMi41MzUsMTQuMTA1LDQ3Ljg1MywyNS4yMzQsNzkuOTEsMzIuMzcmIzEwOyYjOTsmIzk7YzQuNzU0LDEuMDYxLDEwLjUwMSwzLjM3NywxMy4xMTIsMi44NjljMy44NzEtMC43NDQsMTIuMjAxLTEyLjAwMSwxNS4xNjYtMTQuNzVjNy4wNDktNi41NTQsMTYuNTM0LTE1LjcyNCwyNi42MzEtNy43ODkmIzEwOyYjOTsmIzk7Yy0xLjM3MiwxMC45MjUtMTEuMTYxLDEzLjQzMy0xMy41MjMsMjMuMzYyYzYuMDcxLDMuODYzLDEyLjUwOSwwLjM2NiwyMC4wODIsMC44MTVjOC44MTIsMC41MjQsMTUuNTY5LDUuNTc3LDIyLjk1MSw0LjUwOCYjMTA7JiM5OyYjOTtjNC43MTEtMC42ODIsNy4wNjktNC4xOTEsMTAuNjUzLTYuNTU0QzQ3NS4zODgsNDQ4LjY0Miw1MDYuNzgsNDMzLjE0Nyw1MTEuNTAxLDQ0Ny44MDJ6IE00MjIuNTc0LDQxNy40NzgmIzEwOyYjOTsmIzk7Yy0wLjE3NC0xLjMyMiwwLjU0MS0zLjU0My0wLjgxOC0zLjY4NEM0MjAuNTc0LDQxNC4zOTMsNDE5LjQwNiw0MTguMTYsNDIyLjU3NCw0MTcuNDc4eiBNMjE2LjQ1NywxMjguOTkmIzEwOyYjOTsmIzk7YzQuMDE0LDIuNDA0LDcuNTQ4LDUuMjkyLDExLjA2Myw4LjE5OWMyLjExNi02LjIzMS0zLjk1Ny0xMC4yMTctMTEuMDYzLTkuODM3QzIxNi40NTcsMTI3Ljg5NiwyMTYuNDU3LDEyOC40NDMsMjE2LjQ1NywxMjguOTl6JiMxMDsmIzk7JiM5OyBNMzI2LjY4OCw0MzEuMDAxYzEuNTYzLDAuMzI5LDIuNjk0LDAuNjQxLDIuODY5LTEuMjI3QzMyOC4wOTcsNDI5LjY3OSwzMjcuMTA0LDQzMC4wNDUsMzI2LjY4OCw0MzEuMDAxeiBNMjcwLjEzNiwzOTQuOTM4JiMxMDsmIzk7JiM5O2MtMC4xMzgsMS45MywzLjc1NSwxLjk2Nyw0LjUxMiwxLjYzOUMyNzQuMDA3LDM5NS4yOTYsMjcyLjA2NSwzOTMuNjMzLDI3MC4xMzYsMzk0LjkzOHogTTI2MC4zMDEsMzg3LjE1NCYjMTA7JiM5OyYjOTtjMC42ODIsMC42OSwyLjQwNywwLjMyNCwzLjY4OCwwLjQxMWMwLjEzNy0xLjUwMS0wLjQ1OC0yLjI3OC0wLjgxOS0zLjI4MUMyNjEuMDE2LDM4NC4wNDgsMjYwLjQyMSwzODUuMzYxLDI2MC4zMDEsMzg3LjE1NHomIzEwOyYjOTsmIzk7IE0xODEuNjIzLDIxOS41NWMtMS4xMTItMC45NDItMS45MTksMC43ODQtMi40NTksMGMxLjMzNS0xMC4xNjYsMy40OC0yNS44MTgtMC44MTktMzQuNDE4Yy0xLjA2My0wLjkyOC0yLjc0NSwwLjMyNi0zLjI3Ny0wLjQxMiYjMTA7JiM5OyYjOTtjMi44NjEtNi44Myw0Ljc5My0yMS4wNzUsMy42ODctMjkuNTA0Yy0wLjM4OS0yLjk3MS0xLjkzMi04LjI1NS0zLjY4Ny05LjQyNWMtNC40MS0yLjkzNi04LjQyMywxLjU3Ni0xMS40NzYsMi40NTkmIzEwOyYjOTsmIzk7Yy0xLjkyMSwwLjU2LTQuMDU3LDAuMTYtNi4xNDYsMC40MDhjLTguMjYzLDAuOTk2LTE3LjAzMSwzLjQ2LTIyLjUzNyw2LjE0NmMyLjg3LDEuOTEzLDYuOTM4LDIuNjI0LDguMTk0LDYuMTQ2JiMxMDsmIzk7JiM5O2MtNy4xNC0wLjUwNS0xMi43MS0yLjU4My0xOC44NTEtNC4wOTZjMC42NTUsOS4yNDUtMTAuNjgzLDYuMzQ4LTE3LjYxOSw2Ljk2OGMyLjM5NiwwLjA1MiwyLjc4LDEuMjEsMi44NjksMi44NjcmIzEwOyYjOTsmIzk7YzAuMjg1LDUuNDM5LTE3LjYxMywxMS44ODUtMjMuNzY4LDcuNzg5Yy04Ljc3OSw3LjA3OCwzLjg2MywxNC4zMDgsMy4yNzgsMjMuMzU4Yy0xLjcyNiwxLjI3OS0yLjUyMywzLjQ4NS00LjA5OCw0LjkxMyYjMTA7JiM5OyYjOTtjLTguNzI1LDAuMjEyLTE3LjkwMiwxLjk2Ny0xNi4zOTQsMTEuMDY2Yy0xLjE3OS0wLjY4OC0zLjAzOS0xLjE0Ny00LjUwOC0wLjQxMmMtMi4yMyw1Ljc0NSwxLjUxNCwxMS45ODEsNi41NTksMTMuMTE2JiMxMDsmIzk7JiM5O2MxLjI3MS0wLjM3LDEuNTY3LTEuNzExLDMuMjc4LTEuNjM5YzExLjM5NiwyLjE3OSwxNS40MDgsOS43MzcsMTQuNzUzLDI0LjE3NGMtMC4xMTQsMi40ODYsMC4xMzMsNS43My0xLjYzOSw3LjM3OSYjMTA7JiM5OyYjOTtjLTYuNDY3LTAuNDQzLTEyLjQ2My0xNi40MDUtMi4wNS0xNi44Yy0yLjQ5Ny0zLjY3NC00LjM4OC05LjE1NS05LjAxNi05LjAxOGMtNS4zMDUsMC4xNTgtNy42ODYsOC41NDItMTEuNDc0LDExLjQ3NSYjMTA7JiM5OyYjOTtjNS40NiwzLjAxNywxOC4yODMsMTEuMzQzLDcuNzg1LDE2LjgwMWM1LjE5NywwLjc3OSw4LjA5NywyLjg0LDEwLjI0NCw1LjczNGMzLjU3OCw0LjgzMiwzLjQ2NCwxMi4wNzIsNi4xNDgsMTUuOTg1JiMxMDsmIzk7JiM5O2M1LjQzMSw3LjkyMiw4LjI5OC03LjEwNiwxNC43NS0wLjgyM2MxLjUyNCwwLjUyNC0wLjY3MS0xLjQ4LTAuODE5LTEuNjM1Yy01LjUzNS01Ljk3Ni0xMy45NzctMTAuODc0LTE3LjIxLTE4LjAzMSYjMTA7JiM5OyYjOTtjMi40ODUtMS4xMzksNS44MTYsMC4xMDQsOC4xOTQsMC40MDhjMC45NC00LjgxNC0yLjQwNS0xMC4yNjItMS4yMjktMTMuOTM2YzAuODQ3LTIuNjM0LDIuNDEtMS40NzQsNC4wOTktMi40NTYmIzEwOyYjOTsmIzk7YzAuOTkzLTAuNTc4LDAuMjE2LTIuNzMsMi4wNS0yLjA0OGMtMC4wMTEsNS42MjYtMy40MDEsMTUuMDk0LDAuNDA3LDE5LjI1OWM1LjU2MSwwLjk5OCw3LjE2Ny04LjU2NSwxMS44ODYtOC42MDUmIzEwOyYjOTsmIzk7YzIuNjM2LTAuMDIzLDUuMTI3LDQuNjE3LDYuOTY1LDYuOTY2YzIuMjA4LDIuODE5LDUuMjA5LDYuMjgzLDQuNTA4LDkuNDIzYy0xLjQ3Niw2LjYyLTEyLjU5NCwxLjU4LTE2LjM5MS0xLjIzJiMxMDsmIzk7JiM5O2MyLjMxNCw5LjE4NiwxNi41NTMsMTAuNjEyLDE3LjIxLDIyLjU0M2MwLjA3NSwxLjMzMS0wLjU5NywzLjAzMS0wLjQwOSw0LjUwNGMwLjgwNSw2LjI5Niw2LjY3NiwxMC45NzUsMTIuNzAyLDYuOTcmIzEwOyYjOTsmIzk7YzAuODg2LDIuMjU4LDEuMDAyLDUuMjg1LDMuMjgxLDYuMTQ2YzEuOTk2LTEuNjg4LDEuMjg3LTYuMDg5LDIuNDU3LTguNjA4YzcuMTUsMS40OTcsMTAuODgzLDQuOTQsMTMuMTEyLDEwLjY1NCYjMTA7JiM5OyYjOTtjMS4xMDQsMi44MjcsMC44MTksOC4wNjcsNS4zMjcsOC4xOTZjMC42OS02Ljk4Ni00Ljc4NC0xMS4zMTUtNS43MzUtMTguMDMxYzMuNjczLDUuOTI2LDE2LjkyMiwxMi4zMzgsMTYuMzkyLDIxLjcyJiMxMDsmIzk7JiM5O2MtMC4zNTIsNi4xODgtNy43MDYsNi44NjEtMTQuNzUzLDcuNzg1YzYuNzE2LDIuMzA4LDkuNTI5LDkuODMsMTYuODAxLDEyLjI5MmMxLjk1NCwwLjY2Niw0LjQ2NCwwLjA5Niw2LjU1NiwwLjgyMyYjMTA7JiM5OyYjOTtjNS4zMjEsMS44NTEsMTMuODI5LDEyLjc1OSwxMS40NzYsMTkuNjdjLTExLjMzOCw1LjcxNC0yMC4xODQtOS43My0zMi43ODQtOS40MjNjNS4zMTMsNi43NzQsMTQuMDA0LDkuMDI4LDIxLjMwOSwxMi4yOTMmIzEwOyYjOTsmIzk7YzcuODYyLDMuNTEsMTUuNzM0LDcuMTA2LDIzLjM1OCwxMC42NTNjMTcuOTcyLDguMzU5LDMwLjQ0NywxOS4yOTYsNDIuMjA5LDMzLjE5M2MtOC4xNjEsNC40NS0zMi44OTctMi45NTItMTguMDMxLTguMiYjMTA7JiM5OyYjOTtjLTUuMTcxLTAuMTc1LTEwLjY0NC0zLjQxOC0xNS4xNjQtMS42MzRjMi4zOTYsMTUuNjM2LDIyLjk2OCwxMy4wOTUsMzguNTIyLDE1LjU2OWMtMS40MTYsMi42ODItMy40MTIsNC43ODYtNC45MTksNy4zNzcmIzEwOyYjOTsmIzk7YzEuMTk5LDAuNzA3LDIuODU2LDAuOTY1LDQuOTE5LDAuODE5Yy0wLjk5NiwxLjU5Ny0zLjU4OSwxLjYwMS0zLjY5LDQuMDk2YzEuOTkyLDIuNjUzLDUuOTM1LDMuMzU2LDguNjA2LDUuMzI3JiMxMDsmIzk7JiM5O2MxMC41MzEtNy41NTIsMTEuNzEyLDkuNTgxLDE4LjQ0LDkuODM1YzYuMzU4LDAuMjM3LDcuNTc3LTguODk5LDEzLjkzNi05LjgzNWMtMS41OTgsMy4zMjMtNC43MjUsNS4xMTEtNi4xNDYsOC42MDgmIzEwOyYjOTsmIzk7YzYuMjI2LTEuNTA1LDguMDAxLTQuODU3LDEzLjEwNy02LjE1YzE4LjI5OC00LjYyOSwzMy4yOTgsMTAuNjEyLDQ4LjM1NSwxMi4yOTdjNS40MTQsMC42MDMsMTAuNzk2LDMuNjQzLDE1LjU3Myw0LjUwOCYjMTA7JiM5OyYjOTtjNi4xNzYsMS4xMTQsOS45NzMtMC45MTksMTQuNzUxLTMuMjc3Yy03LjI3Ny02Ljc5NS0yMy45ODYtNC4xNDktMjkuOTEyLTEyLjI5N2MwLjIyOS0xLjQwOSwxLjE5My0yLjA4MywyLjA1LTIuODY1JiMxMDsmIzk7JiM5O2MtMTkuMTgsNC4yMTMtMzEuMjU2LTcuMjgxLTM5LjM0LTE4LjAzMWMtMjMuNjYyLTYuMTEyLTQ0LjQyMS0xNS4xMzMtNTQuNTA0LTM0LjgzMWMtMC40ODQtMS44NTUsMS44MTctMC45MTUsMS4yMzMtMi44NyYjMTA7JiM5OyYjOTtjLTguMzE5LTkuMjU3LTE2LjYzNC0xOC42NTUtMjMuMzU4LTI5LjUwNWMtMi4zMjQtMy43NDYtMy45MTUtOC40NTQtNi41NTgtMTEuNDczYy0xLjY3NC0xLjkxMy00LjQ4My0yLjk2Ni02LjE0Ni00LjkyJiMxMDsmIzk7JiM5O2MtMS44MjEtMi4xNDItMi4wNjktNC44MjQtNC45Mi01LjczNGMtMS4wOTYsMS42MzQtMC4zNjEsNS4wOTgtMS4yMjcsNi45NjVjLTEuOTcxLTcuOTEzLTYuMzYyLTE1LjQyOC0xNC43NTItMTUuNTczJiMxMDsmIzk7JiM5O2MtMC4xNTYtNS43NTUsNC40OTMtNi43MDMsNi45NjUtOS44MzVjLTMuMjU0LTMuOTEzLTQuMDM4LTguODQxLTUuNzM2LTE0Ljc1Yy00LjEyOC0xNC4zNTktNy41MzktMjkuMzU5LTExLjA2Ni00Mi42MiYjMTA7JiM5OyYjOTtjLTQuNjc0LDEuNzQ1LTUuOTEzLDYuOTI2LTguMTk0LDExLjA2NWMwLjIyNS01LjkyLDAuNTAyLTExLjc5MiwzLjY4OS0xNC43NTVjMS40NTcsMC4xODMsMS42MTcsMS42NjQsMi40NTcsMi40NiYjMTA7JiM5OyYjOTtjMC43Ny0yLjc5MiwzLjQxMi01LjM5NiwyLjA0OC05LjAxNGMtMS4wNTgtMS42MzQtNC4xNTEtMC44NzItNC45MTUtMC44MTlDMTgyLjQxNCwyMzQuMjcxLDE4NC4xMTIsMjI1LjI4OSwxODEuNjIzLDIxOS41NXomIzEwOyYjOTsmIzk7IE0zNDYuMzU3LDQ2Mi41NTdjMy41NDMtMS41MTQsNi43MzItMy4zNzcsOC4xOTItNi45N0MzNTAuNjk4LDQ1Ni41NTIsMzQ1LjI2OCw0NTguMDA3LDM0Ni4zNTcsNDYyLjU1N3ogTTM0Ni43NjUsNDU0LjM2JiMxMDsmIzk7JiM5O2MtMi4zNywxLjMxMy01LjAzNiwyLjM0MS02LjU1NCw0LjUwOEMzNDMuNjA4LDQ1OS4wNzEsMzQ3LjU4OCw0NTUuNjYxLDM0Ni43NjUsNDU0LjM2eiBNMzM0LjA2NCw0NjAuNTA2JiMxMDsmIzk7JiM5O2MyLjMyLTAuNjE5LDQuODAzLTMuMDE1LDQuNTA4LTQuOTE5QzMzNS44NzgsNDU1Ljg1NywzMzEuNzExLDQ1Ny43NzgsMzM0LjA2NCw0NjAuNTA2eiBNMzM1LjcwMyw0NTEuMDc5JiMxMDsmIzk7JiM5O2MtMy42ODgtMS4xNjUtNi42OTksMS43MjItNi45Nyw1LjMzMUMzMzIuMDE5LDQ1NS41OTUsMzM0LjI0Myw0NTMuNzIsMzM1LjcwMyw0NTEuMDc5eiBNMzI0LjIyNiw0NTEuOTAyJiMxMDsmIzk7JiM5O2MtMy42MDIsMC42MjgtNi4yOTYsMi4xNjItNy4zNzcsNS4zMjNDMzIxLjI1Miw0NTguOTcyLDMyMy41MDYsNDU1LjE4OCwzMjQuMjI2LDQ1MS45MDJ6IE0zMTguNDkxLDQ2Mi41NTcmIzEwOyYjOTsmIzk7YzEuMDE1LDAuMDU4LDEuOTg3LDAuMDc0LDIuMDUtMC44MjNDMzE5LjkyNiw0NjEuMDg0LDMxOC4yMDQsNDYxLjEzNCwzMTguNDkxLDQ2Mi41NTd6IE0zMjUuMDQ5LDQ0NC45MzMmIzEwOyYjOTsmIzk7Yy01LjczNC0wLjQ0LTEyLjU5MiwzLjI4MS05LjAxNiw4LjE5NkMzMTkuODUxLDQ1MS4yMDgsMzIzLjcxOCw0NDkuMzQxLDMyNS4wNDksNDQ0LjkzM3ogTTI5Ni43NzEsNDUyLjcyMiYjMTA7JiM5OyYjOTtjMy41ODEsMC41MDMsNC41MTctMy41OTMsNi45Ny0yLjg3NGMxLjQyMywwLjg5OCwwLjU1OCw0LjA4OCwyLjg2NSw0LjEwMWM1LjM2LTEuMDksNy4yOS04LjQwNCw0LjA5Ny0xMy41MjMmIzEwOyYjOTsmIzk7QzMwMy40NzksNDQxLjY5NywyOTYuODcsNDQ1LjY3MywyOTYuNzcxLDQ1Mi43MjJ6IE0yOTguNDA5LDQ0Mi4wNjdjLTIuMTc1LDEuMTAyLTQuNDkxLDIuMDU5LTUuNzM0LDQuMDk2JiMxMDsmIzk7JiM5O0MyOTUuMzU2LDQ0Ni4wNDcsMjk5LjM0OSw0NDMuMDksMjk4LjQwOSw0NDIuMDY3eiBNMjg2Ljk0LDQ0NC4xMTdjMC4yMjksMS4wOS0xLjY4OCwyLjA4NC0wLjQxNiwyLjg2NSYjMTA7JiM5OyYjOTtDMjg2Ljg2NSw0NDYuNDY3LDI4OS4wMiw0NDQuNDQxLDI4Ni45NCw0NDQuMTE3eiBNMjc5LjU2Myw0NTMuOTQ4Yy0wLjEyOSwwLjU1OC0wLjU4NiwwLjc4Mi0wLjQwNywxLjYzOWMwLjU0MSwwLDEuMDksMCwxLjYzOSwwJiMxMDsmIzk7JiM5O0MyODAuOTA2LDQ1NC41MTQsMjgwLjY0LDQ1My44MjcsMjc5LjU2Myw0NTMuOTQ4eiBNMjczLjQxNyw0NTEuOTAyYy0yLjA3MSwwLjExNi0yLjg1NCwxLjUxOC0yLjg3LDMuNjg1JiMxMDsmIzk7JiM5O0MyNzIuMzMxLDQ1NS4xOTEsMjczLjk1Nyw0NTQuNjMsMjczLjQxNyw0NTEuOTAyeiBNMjMyLjAyNCw0MzEuMDAxYy0yLjUyNS0wLjExMS0zLjI5NSwwLjI3OS0wLjQwNywwLjgyNCYjMTA7JiM5OyYjOTtjMi43NTEsMC41MDcsNy42MDQsMC43NzMsOS40MjYsMEMyMzguODgsNDMxLjgsMjMzLjI5MSw0MzEuMDYsMjMyLjAyNCw0MzEuMDAxeiBNMjQ0LjMyMSw0MjQuNDQ3JiMxMDsmIzk7JiM5O2MtMi4xNDQtMS42My02LjQ1NC0wLjQ0OS04LjYwNSwwLjQwOEMyMzYuOTU3LDQyOC4yNjUsMjQzLjA1MSw0MjYuNzUxLDI0NC4zMjEsNDI0LjQ0N3ogTTIzMS4yMSw0NTUuMTc5JiMxMDsmIzk7JiM5O2MxMC4yMiw1LjM1NiwyNC4yOTIsMTEuMjAzLDM4LjkyNiw5LjQyNEMyNTkuNTAyLDQ1OS4zOTYsMjQzLjY4OCw0NTcuMTc1LDIzMS4yMSw0NTUuMTc5eiBNMjE2LjA0Niw0NTAuNjcxJiMxMDsmIzk7JiM5O2MwLjk3OSwxLjM0NCwzLjI5MSwxLjM1Miw0LjkxNSwyLjA1MUMyMjMuOTg2LDQ0OS43OTgsMjE3LjMzNyw0NDguMTUxLDIxNi4wNDYsNDUwLjY3MXogTTE3Ny41MjUsNDE3LjQ3OCYjMTA7JiM5OyYjOTtjLTIuNzY2LDAuMjQxLTUuNzc2LDAuMjMzLTYuNTU2LDIuNDYyQzE3My42MDQsNDIwLjkxNywxNzcuNDE3LDQyMC4zMSwxNzcuNTI1LDQxNy40Nzh6IE0xNjkuNzM4LDQyOC4xMzImIzEwOyYjOTsmIzk7YzAuOTYzLDAuODczLDIuNzM0LDEuOTEzLDMuMjc5LDBDMTcyLjU5Myw0MjcuNjk5LDE3MC4wOTIsNDI3LjI4OCwxNjkuNzM4LDQyOC4xMzJ6IE0xNzQuNjU2LDM5My4zJiMxMDsmIzk7JiM5O2MwLjM3Mi0xLjcxMy0yLjg5MS0yLjM2MS0zLjI3Ny0wLjgxOEMxNzIuMjc3LDM5Mi45NDYsMTczLjA1NSwzOTMuNTM3LDE3NC42NTYsMzkzLjN6IE0xNzkuOTg1LDQwNy4yMzEmIzEwOyYjOTsmIzk7Yy0wLjAyLTAuNTYyLDAuMTkzLTAuODk4LDAuNDA5LTEuMjI3Yy0xLjIyMS0xLjI2MS0zLjY5LTEuNDg1LTUuNzM4LTAuODE5QzE3NC45ODQsNDA3LjE1NiwxNzguMjY2LDQwNy45NzksMTc5Ljk4NSw0MDcuMjMxeiYjMTA7JiM5OyYjOTsgTTE4MC4zOTUsNDMzLjQ2M2MwLjUyNCwwLjU1OCwxLjkzNCwwLjU1OCwyLjQ1OCwwYzAuMTkzLTEuMjg5LTAuNTEyLTEuNjc2LTEuMjI5LTIuMDU0JiMxMDsmIzk7JiM5O0MxODEuMjU2LDQzMi4xMzcsMTgwLjYzNCw0MzIuNjA2LDE4MC4zOTUsNDMzLjQ2M3ogTTE5My4wOTksMzg2LjMzNWMtMS4zMzUtMy44NTktNS42ODgtMi44NDEtOC42MDctNC4wOTcmIzEwOyYjOTsmIzk7Yy00LjY5MS0yLjAyMS04LjY5Ni02Ljg0NS0xNC43NTMtNi45NjVjLTAuMjcyLDAtMC41NDcsMC0wLjgxNywwQzE3NC4xOSwzODEuNDgxLDE4MS4xNjIsMzg4LjE1MiwxOTMuMDk5LDM4Ni4zMzV6JiMxMDsmIzk7JiM5OyBNMTcxLjc4OCwzNzEuMTc3Yy0zLjgyNS0yLjU5OS04LjAxNS00LjgzMi0xMy41MjMtNS43MzhDMTYwLjAxNiwzNjkuODM0LDE2Ni44MzIsMzcxLjM0OCwxNzEuNzg4LDM3MS4xNzd6IE0xODQuNDkxLDM5MC40MzEmIzEwOyYjOTsmIzk7YzIuODczLDMuMDAzLDYuNDc5LDUuMjczLDEyLjcwNCw0LjkxNkMxOTQuODAyLDM5Mi4xMzYsMTg5LjA4NCwzOTAuMDc3LDE4NC40OTEsMzkwLjQzMXogTTIwMC4wNjMsNDA4Ljg3NCYjMTA7JiM5OyYjOTtjLTQuMjE5LTIuOTI0LTEwLjg1NS03LjY2OC0xNi4zOTEtNi41NTlDMTg2Ljg3NCw0MDYuNDkxLDE5My4zMTEsNDA5LjYxOCwyMDAuMDYzLDQwOC44NzR6IE0xODQuNDkxLDQyNC40NDcmIzEwOyYjOTsmIzk7Yy0wLjA5OSwwLjU4My0wLjY3NCwwLjY4Ny0wLjgxOSwxLjIyM0MxODQuNjgyLDQyNi45ODgsMTg2LjIwMiw0MjQuNzIyLDE4NC40OTEsNDI0LjQ0N3ogTTE5My45MTYsNDM2Ljc0JiMxMDsmIzk7JiM5O2MwLjM0OCwxLjU2MywxLjg1MywxLjk3MSwzLjI3OSwyLjQ1OGMwLjU1NS0wLjk0OCwxLjY0Ni0xLjM2LDEuMjI5LTMuMjc3QzE5Ny40MjgsNDM1LjMyMiwxOTMuODQ2LDQzNC45NzcsMTkzLjkxNiw0MzYuNzR6JiMxMDsmIzk7JiM5OyBNMjAxLjcwMyw0MTguNzA5Yy0xLjI2OS0wLjc3Ny01Ljg5Ny0xLjY0Ni02Ljk2OCwwQzE5Ni43MjMsNDE5LjUxNiwyMDAuNjI4LDQyMS42MDQsMjAxLjcwMyw0MTguNzA5eiBNMjAyLjkzMiw0MDQuNzczJiMxMDsmIzk7JiM5O2MwLjQxLTMuMDQ4LTMuMDM4LTMuMDYxLTQuNTA4LTIuMDVDMTk4LjU2Miw0MDQuNzczLDIwMS4yNzQsNDA0LjI1LDIwMi45MzIsNDA0Ljc3M3ogTTIwNy40MzksMzgyLjY0NiYjMTA7JiM5OyYjOTtjLTEuODUxLTIuNzk1LTYuOTkyLTIuMjk2LTEwLjY1NC0zLjI3N2MtMi42ODItMy4zNjgtOS4wOTUtNC41OTEtMTQuNzUyLTMuNjg4QzE4OC41MTIsMzc5Ljk5NywxOTUuODgxLDM4My40MTUsMjA3LjQzOSwzODIuNjQ2eiYjMTA7JiM5OyYjOTsgTTIwNi42Miw0MjEuOTg1YzEuNzYsMS41MTksNC41MTksMi4wMzgsNi45NjYsMi44N2MwLjEzMS0wLjk2NSwwLjY0Ni0xLjUzOSwwLjQwOS0yLjg3JiMxMDsmIzk7JiM5O0MyMTIuODAyLDQyMC42MDksMjA3LjYyNSw0MTkuODk4LDIwNi42Miw0MjEuOTg1eiBNMTcxLjc4OCwzNTUuNTk5YzAuNDEtMS45MTItMC43MTUtMi4yODctMi40NTktMi4wNDYmIzEwOyYjOTsmIzk7QzE2OC43MTEsMzU1LjY3NCwxNzAuNzU1LDM1NS4xMjksMTcxLjc4OCwzNTUuNTk5eiBNMTgxLjYyMywzNjAuNTE5Yy0xLjE5Ny0wLjMwNC0wLjc5NC0yLjIwOC0yLjQ1OS0yLjA1JiMxMDsmIzk7JiM5O0MxNzcuNjU0LDM1OS44NTQsMTgwLjM3NCwzNjEuOTYyLDE4MS42MjMsMzYwLjUxOXogTTE1My4zNDgsMzYzLjM4OGMtMS4zNi0zLjAwNy00LjQyNS00LjMxNi02LjU1Ni02LjU1OCYjMTA7JiM5OyYjOTtjMy45OTYtNS43ODktNC45Mi04LjE1OS02LjU1Ny0xMi4yOTNjLTAuMDE5LTEuMjQ3LDAuODY1LTEuNTkzLDEuMjI5LTIuNDYyYy0zLjQ0My0yLjAxNy03LjQxOS0zLjUwNS05LjQyNi02Ljk2MSYjMTA7JiM5OyYjOTtjMS41ODUtMS4xNDcsNS44MSwwLjM0MSw3LjM3NS0wLjgyM2MtMi40ODItMS4wNjktNS4xNjItMS45MzgtNi4xNDYtNC41MDhjMS40MzctMy4zNDQsNy4yNzktMi4yNzksOC42MDUtNS43MzUmIzEwOyYjOTsmIzk7Yy03LjA1OS0xLjU1OS0xNC4wNzItNS4zMS0yMS43Mi00LjkxOWMwLjA4NywyLjkxOSwyLjY4NSwzLjMyNiwzLjY4OCw1LjMyN2MtMi4yNjctMS4wMDctNC4xMDEtMi40NTgtNy4zNzUtMi40NTgmIzEwOyYjOTsmIzk7Yy0wLjI0NSwyLjAyMSwxLjA2NCwyLjQ4NywwLjgyMSw0LjUwOGMtMi4yMzUsMC4xODMtMy4zNjgtMC43MzEtNS43MzktMC40MDdjMS42OSwzLjc3MSw2LjAyNCw0LjkwMiw3LjM3OCw5LjAxNiYjMTA7JiM5OyYjOTtjLTEuNjc2LDAuNDI0LTMuOTUxLTAuNjY2LTQuNTA4LDBjNC4zMjYsMy41OTMsMTAuNjQ0LDcuMzgxLDEzLjExMSwxMS40NjljLTQuMDI1LTAuNzQ4LTYuMzI5LTMuMjI3LTEwLjI0Mi00LjA5NiYjMTA7JiM5OyYjOTtjMy4yNzYsNi40ODcsMTEuMjUzLDcuODM5LDE3LjIxLDExLjA2NUMxNDAuNTk0LDM1Ni44NTQsMTQ2LjA1OCwzNjIuMTc4LDE1My4zNDgsMzYzLjM4OHogTTE0NC4zMzIsMzY4LjMwNCYjMTA7JiM5OyYjOTtjMS43MTMsMC45MzYsNS4xMjMsMy45MDgsNy4zNzcsMS42NDNDMTQ5LjgwOSwzNjkuMTA1LDE0Ni44MiwzNjcuMTkzLDE0NC4zMzIsMzY4LjMwNHogTTE0MS4wNTUsMzY2LjI1MyYjMTA7JiM5OyYjOTtjLTEuMTUzLTEuODY3LTcuMDM2LTIuODYxLTguNjA0LTEuNjM5QzEzNS4xMjUsMzY1LjM4NCwxMzcuNjQ1LDM2Ny40NTksMTQxLjA1NSwzNjYuMjUzeiBNMTMzLjY3OCwzNjcuNDg0JiMxMDsmIzk7JiM5O2MtMC4xMjksMC41NTctMC41ODIsMC43ODEtMC40MDksMS42NDNjMC43MjEtMC4yMzcsMi40MDcsMC40OSwyLjQ1OS0wLjQxMkMxMzUuMDkyLDM2OC4yNTgsMTM0Ljg3MywzNjcuMzg0LDEzMy42NzgsMzY3LjQ4NHomIzEwOyYjOTsmIzk7IE0xMjguMzUxLDMxMi45ODJjLTEuMTE4LTMuODUxLTIuNjExLTguMDcxLTUuNzM2LTExLjA2MmMtMS42ODMtMS42MTMtMy4zMTMtMS41OC00LjUwOC0zLjY5MyYjMTA7JiM5OyYjOTtjLTMuMTY3LTUuNTcyLTEuNjQ5LTEzLjQzOS01LjczNy0xOS4yNTRjLTAuOTY3LTAuMzE1LTIuODMyLTAuODExLTMuNjg4LDBjMC4wNzcsMi42ODcsNi4zMTMsOS4wNTgsMi4wNTEsMTIuMjkzJiMxMDsmIzk7JiM5O2MtOS40MjQsMC4zNzQtMTMuMDUyLTcuMTI4LTIyLjEyOC01LjczOWMtMi4wNDQsNS4yOTQsNS4xODIsOC4wMTQsMy4yNzYsMTEuODg2QzEwNC45MTcsMzAxLjU5NywxMTUuMjcsMzEwLjY2MiwxMjguMzUxLDMxMi45ODJ6JiMxMDsmIzk7JiM5OyBNOTguODQ2LDMyNS4yNzVjMi40MDgsMS44MzQsNS44ODksNC43NjYsOS4wMTYsNC41MDhDMTA1LjM4NSwzMjguMDI4LDEwMy4xMDYsMzIzLjg5NSw5OC44NDYsMzI1LjI3NXogTTk0LjMzOCwzMjEuNTkxJiMxMDsmIzk7JiM5O2MtMS4wNjMtMy4zMDctMi45MDYtNS44MzUtNi45NjYtNi4xNDZDODguMTk4LDMxOC45ODcsOTIuMDQ3LDMxOS41MTIsOTQuMzM4LDMyMS41OTF6IE04Ny4zNzIsMzMyLjI0NSYjMTA7JiM5OyYjOTtjMi4xOTQsMS41MDEsNC4zNzMsNS4xODEsNi41NTcsNS4zMjdDOTIuMzMyLDMzNS40OCw5MC4zODYsMzMxLjU1OSw4Ny4zNzIsMzMyLjI0NXogTTkwLjI0MiwzMDMuOTY3JiMxMDsmIzk7JiM5O2MwLjIxMi0wLjYwNywwLjYwNC0xLjAzMSwwLjgxOS0xLjYzOWMtMS4wNTEtMS40NDctMy42NDItMC42NTctNC4wOTcsMC44MjNDODcuNzcsMzAzLjcwOSw4OS4zMDQsMzAzLjU0Myw5MC4yNDIsMzAzLjk2N3omIzEwOyYjOTsmIzk7IE0xNTMuNzU5LDMyMC4zNTljLTAuMDU4LTMuNTI2LTMuOTc1LTUuNTcyLTYuOTY3LTMuNjg1QzE0Ny43NCwzMTkuMjc4LDE1MC41OTcsMzE5Ljk2OSwxNTMuNzU5LDMyMC4zNTl6IE0xMTUuMjM2LDI2Ni42ODImIzEwOyYjOTsmIzk7YzAuMDY5LTAuNjc4LTIuNTIzLTAuNjc4LTIuNDU3LDBDMTEzLjM0MSwyNjYuODA2LDExNS4yNTEsMjY4LjUzMiwxMTUuMjM2LDI2Ni42ODJ6IE05OS4yNTgsMjY1LjAzOWMtMC41NDcsMC0xLjA5NCwwLTEuNjQxLDAmIzEwOyYjOTsmIzk7Yy0wLjU2MywwLjUyNy0wLjQwNSwxLjc4NC0wLjQxLDIuODY1YzAuNzQ5LDAuMTEyLDIuMjk4LDEuNDgsMi44NywwLjQxNUM5OS4wNjMsMjY3Ljk2MiwxMDAuMTk1LDI2NS40NjcsOTkuMjU4LDI2NS4wMzl6JiMxMDsmIzk7JiM5OyBNNjguNTIxLDI2NC42MjdjMS4zNTgsMy4wOSw2Ljg1NSwyLjg2MSw3Ljc4Ny0wLjQwN0M3My45NzYsMjYzLjMxNyw3MC41NDEsMjYzLjk0NSw2OC41MjEsMjY0LjYyN3ogTTY5Ljc1MywyNTMuMTUzJiMxMDsmIzk7JiM5O2MtMS41ODUtMC4wNzktMy4wMjEtMC4wMTMtNC4xMDEsMC40MTJDNjUuOTcxLDI1NS4zNTMsNjkuNzQyLDI1NS4wMzUsNjkuNzUzLDI1My4xNTN6IE03My40MzksMTg3LjE4JiMxMDsmIzk7JiM5O2MtMi4xMDYsMC45NzMtNi40OTgtMC45NzUtOC42MDQsMGMxLjg2NSw3LjM4MywxNS42ODgsMy40MDgsMTQuNzUzLTIuNDZjLTAuNzk0LTQuOTc4LTEzLjkzOS0zLjc0NS0xOC40NDEtMy4yNzcmIzEwOyYjOTsmIzk7QzY0LjYzNiwxODMuOTYzLDcwLjE4MiwxODQuNDI3LDczLjQzOSwxODcuMTh6IE01Ny4wNDksMTk0Ljk2NWMwLjc3MSwxLjE0MiwyLjg5LDAuOTM0LDQuMDk4LDEuNjM5JiMxMDsmIzk7JiM5O2MwLjIzNy0wLjg1NCwxLjAxNy0xLjE2OCwwLjgxOS0yLjQ1OEM2MC44OTEsMTkzLjU3OCw1Ny4wMjMsMTkzLjEzMSw1Ny4wNDksMTk0Ljk2NXogTTc3Ljk0OSwxOTMuMzI3JiMxMDsmIzk7JiM5O2MtMC4yMjEsMC44OTQtMC45OTQsMi42NTEsMC40MDcsMi44NjlDNzkuMzMyLDE5NS41MDgsNzkuMTI4LDE5My45MjEsNzcuOTQ5LDE5My4zMjd6IE04OS40MjMsMTY4LjczOSYjMTA7JiM5OyYjOTtjLTAuMTA4LTEuMTk4LDAuOTI1LTEuMjU2LDAuODE5LTIuNDU4Yy0xLjY2Ni0wLjE2My0yLjg1NywwLjE0OS0yLjg3LDEuNjM4Qzg4LjE1MiwxNjguMDk3LDg4LjQwMSwxNjguODAyLDg5LjQyMywxNjguNzM5eiYjMTA7JiM5OyYjOTsgTTg5LjAxMyw3Ny43NjdjLTEuNjMyLDEwLDcuMzc4LDIyLjA5NywxOC4wMjksMTguNDM5YzAuNDk3LTMuNzc0LTEuMjI1LTUuMzI5LTEuMjI5LTguNjA0YzIuNzE4LTAuNjU5LDQuMzE4LDEuOTUxLDUuNzM2LDEuMjI5JiMxMDsmIzk7JiM5O0MxMDcuNTYzLDgxLjYxOCw5Ni45Niw4MS4wMjEsODkuMDEzLDc3Ljc2N3ogTTg0LjUwMyw2OC4zNDJjMy42MDIsMC43MTMsOS4yNTUsMC4zNTIsMTAuNjU2LTIuNDU5JiMxMDsmIzk7JiM5O0M5Mi40MzgsNjQuMDY1LDg0LjI3NCw2My41NzgsODQuNTAzLDY4LjM0MnogTTc0LjY2OCwzOS42NTZjMC43ODgtNy45NTktOC45MzgtMTIuMzU3LTE0Ljc1LTYuOTY1JiMxMDsmIzk7JiM5O2MtMy42MzMsMy4zNjgtNS4yMTEsMTEuNTAyLDAuNDA5LDE0LjM0M2MtMC42MzgtMi4wOTYtMi41MDEtMi45NjMtMi4wNDgtNi4xNDZDNjIuNTUsMzguNDQ2LDcwLjM4MSw0Mi4wNzksNzQuNjY4LDM5LjY1NnomIzEwOyYjOTsmIzk7IE03MS44MDMsNjUuODgyYzEuMDQyLTAuNTk1LDIuNjA3LTAuNjY2LDIuNDU4LTIuNDU4QzczLjAwMSw2My41NTEsNzAuODU0LDY0LjkwOSw3MS44MDMsNjUuODgyeiBNNjMuMTk1LDk2LjIwNiYjMTA7JiM5OyYjOTtjNS4xMSwwLjEyMSw4Ljk2My0yLjc2MSwxMy45MzMtMi44NjdjNC4zMDItMC4wOTEsOC40MDIsMS4xODksMTMuNTIzLDAuODE5Qzg2Ljk5NCw4My40MjUsNjkuMjI1LDkyLjc5OCw2My4xOTUsOTYuMjA2eiYjMTA7JiM5OyYjOTsgTTU1LjQxLDExNS4wNTdjOS42NjktMS4yMjksMjMuMTQtNy41OTEsMzYuMDYxLTYuMTQ2YzQuODc0LDAuNTQ0LDkuMTQzLDMuMjg3LDExLjg4Myw1LjMyN2MtMS4zOTctMS40OTEtMy4wNTItNy42MSwwLTguNjA0JiMxMDsmIzk7JiM5O2M2LjcyNSwxLjI4MSw2Ljk0OSwxMy45ODcsMTUuMTYyLDEyLjI5M2M0LjE4NC0wLjg2Myw1LjQ1OC04Ljk3OSwzLjI3OS0xMy45MzNjMy4xMjcsMi4yLDQuNzM4LDUuOTE2LDkuMDE2LDYuOTY3JiMxMDsmIzk7JiM5O2MtMC45NzYtMy45NDItMy44MTMtNi4wMjMtNS43MzYtOS4wMTZjMS4yMDgtMS41MjIsMi43OS0yLjY3NCwyLjQ1Ny01LjczOWMtMTEuNzI3LTEuMTI3LTIyLjEzNiw1LjIwMy0zMy4xOTMsNy4zNzcmIzEwOyYjOTsmIzk7Yy04LjU4MSwxLjY5LTE0Ljk2NywzLjM2NC0yMi41MzUsNS4zMjdDNjYuMTE0LDExMC4zODUsNTkuNzgzLDExMS40Miw1NS40MSwxMTUuMDU3eiBNMjAuOTg4LDE5OS44ODQmIzEwOyYjOTsmIzk7Yy0wLjU2MywwLjUyMi0wLjcxNCwyLjQ0OCwwLjQwOSwyLjQ1OEMyMS43MzQsMjAyLjA0NSwyMi40OTcsMTk5LjUwNiwyMC45ODgsMTk5Ljg4NHogTTM1LjMyOCwxNTEuMTImIzEwOyYjOTsmIzk7Yy0xNy45NjksMi44NTEsMS4xODQsMjEuOTYxLDExLjg4NiwxNy4yMTJjMS4zNTUtMi4wODEsMC45MzQtMy45ODgsMC44MTktNi45N2M2LjIzNSwwLjYxMSwxMC45MjYtMi40MjYsMTYuMzkzLTEuMjI3JiMxMDsmIzk7JiM5O2MwLjg4MiwxLjkwNS0wLjc4NiwzLjUxOC0xLjIzLDUuMzI1YzE4LjU5My0xLjE3OSwyNy43OTktMTUuNzg4LDQ3Ljk0My0xOC4wMjljMi41MDMtMC4yNzksNS4zNTYsMC4xNjQsOC4xOTgsMCYjMTA7JiM5OyYjOTtjOC40ODMtMC40OTUsMTcuODgtMi4wNjcsMjYuNjM2LTMuNjg5YzguNTkxLTEuNTg4LDE2LjQ0Ni00Ljc0NywyMy43NjYtNi41NTRjOS4xODctMi4yNzEsMjMuMTYzLTguMjcxLDIxLjMxMS0yMC40OTEmIzEwOyYjOTsmIzk7Yy0wLjIxMi0xLjM5MS0xLjE3Ny0yLjY0MS0yLjA1LTQuMDk4Yy00OC44MzQtNC43MjItODUuMzQ2LDE0LjQyMi0xMjMuNzU0LDIyLjEyOWMtNC42MTQsMC45MjUtMTAuMjI0LDAuMzEtMTMuOTM0LDQuMDk2JiMxMDsmIzk7JiM5O2MxLjM0MiwzLjMwMiw2LjA1OCwzLjIzMSw4LjE5NCw1LjczN2MtMS4wNjgsMS4yNTItMy43MDksMC45MzItNC4wOTYsMi44N2MwLjkwNCwzLjQ2Niw2LjA0MiwyLjY5NCw2LjU1Niw2LjU1OCYjMTA7JiM5OyYjOTtjLTguMTU3LDUuNzUtMjUuMjYxLTEuNTg0LTIxLjMwOS0xMy4xMTRjLTEyLjMyNSwyLjcwMS0zMC4yNyw1LjM4NS0zMC4zMjMsMTkuMjZjLTAuMDI1LDYuMTE1LDMuNjIsMTEuNzcxLDcuNzg0LDE1LjE2MiYjMTA7JiM5OyYjOTtDMTUuMjk3LDE2Mi4zODcsMjAuMDkyLDE0My4yOTcsMzUuMzI4LDE1MS4xMnogTTUwLjQ5MiwyMjcuNzQ5YzAuMzczLTIuNzc1LTQuMTg4LTQuNzE4LTUuNzM2LTIuODY3JiMxMDsmIzk7JiM5O0M0Ni4yNjYsMjI2LjIzOSw0OC42MywyMjYuNzQsNTAuNDkyLDIyNy43NDl6IE0zNi4xNDksMjMzLjA3NmMyLjg5OCwxMC4wNzYsMy44NDEsMjIuMTEzLDExLjQ3NCwyNy40NTYmIzEwOyYjOTsmIzk7QzQ2LjQ3NCwyNDguNzA0LDQyLjI3NywyMzkuOTI1LDM2LjE0OSwyMzMuMDc2eiBNNTMuMzYsMjIyLjQyMmMxLjI3Ni01Ljc4NS03LjIxMS04LjA1MS03Ljc4NS00LjA5OSYjMTA7JiM5OyYjOTtDNDUuMDc0LDIyMS43NjUsNTAuNTAxLDIyMS4zNjUsNTMuMzYsMjIyLjQyMnogTTU1LDIxMS4zNTZjLTEuODUtMi4wMjMtNi40OTMtMy4yNzctOS44MzQtMi40NTgmIzEwOyYjOTsmIzk7QzQ2LjM0NSwyMTEuNzk5LDUzLjU5OSwyMTYuMDkyLDU1LDIxMS4zNTZ6IE01MC4wODMsMTkzLjMyN2MxLjg1MS0xLjE1NCwzLjgxNS0yLjE5OCw0LjA5Ni00LjkyJiMxMDsmIzk7JiM5O2MtMi4zNzgtMS43OC04LjA3MS0yLjAzMS04LjYwNCwwLjgyNEM0NS4xNzIsMTkxLjM4OSw0OC4wNjQsMTkyLjI2NCw1MC4wODMsMTkzLjMyN3ogTTU1LjQxLDIwMC4yOTImIzEwOyYjOTsmIzk7YzAuMTc5LTEuNDA4LTAuMTYyLTIuMjk1LTAuNDEtMy4yNzljLTIuMTAyLTAuMDUyLTMuMDgzLDEuMDE1LTMuMjc4LDIuODcxQzUyLjc0MiwyMDAuMjI4LDUzLjkxNywyMDAuNDE5LDU1LjQxLDIwMC4yOTJ6JiMxMDsmIzk7JiM5OyBNMjYuNzI1LDE5OC4yNDRjLTAuMzE2LTEuMDUtMC40MS0yLjMyMy0xLjIyOS0yLjg2OEMyNC40NzcsMTk2LjQ3OSwyNC40MzgsMTk4LjQ2LDI2LjcyNSwxOTguMjQ0eiBNMzAuODIzLDE3MC4zOCYjMTA7JiM5OyYjOTtjLTEuODM5LTAuNzE3LTQuNTYxLDAuMDQ4LTUuMzI3LDEuNjM4YzAuODYsMC43NzYsMi4wOTgsMS4xODEsMy4yNzgsMS42MzdDMjkuMTg4LDE3Mi4yOTksMzEuMDQxLDE3Mi4zNzQsMzAuODIzLDE3MC4zOHomIzEwOyYjOTsmIzk7IE0zNS4zMjgsMjIzLjI0MWMtMS4wNi0yLjM1NC0xLjE5My01LjYzNS0zLjI3Ni02Ljk2NUMyNi40NDEsMjE3LjA3NCwzMiwyMjUuMTM1LDM1LjMyOCwyMjMuMjQxeiBNNDMuMTE1LDI2Ny40OTYmIzEwOyYjOTsmIzk7YzQuMDAxLDkuNjczLDguMjI0LDIwLjEyOCwxNi44MDMsMjQuNTg2Yy02LjQxNS03LjEzNy03LjkyOS0xOC45NDYtMTIuMjk1LTI3LjQ1NWMtMS41MS0yLjkzNi0zLjkxOS01LjIxOS01LjMyNy04LjE5MyYjMTA7JiM5OyYjOTtjLTMuMzEzLTcuMDAzLTQuODQtMTUuMTc0LTExLjQ3My0xOC40NDFDMzMuNDM3LDI0OC4yOTgsMzkuMDM2LDI1Ny42MjQsNDMuMTE1LDI2Ny40OTZ6IE0xNTUuODA4LDQyMS4xNjcmIzEwOyYjOTsmIzk7Yy0yLjQ4LTguNDQ2LTkuMTM3LTEyLjcyMi0xOC40NDEtMTQuMzQzYy0yLjMtNS40ODUtOC45MzgtNi42MjktMTAuMjQ0LTEzLjExMmMtMC4yMTItMS4zMzEsMi41MzgtMS44MDEsMS42NDEtMi40NTgmIzEwOyYjOTsmIzk7Yy0xMi40NzIsMi4zNjItMTIuOTEyLTEwLjg1Ny0xOC44NTEtMTYuMzkzYy0xNC45ODcsMC4yNzEtMTIuMTk5LTE4LjI3Mi0yMC40ODktMjcuODYyYy0yLjM2OC0yLjc0NC00LjcxNi0zLjM3Ny03LjM3Ny02LjE0NiYjMTA7JiM5OyYjOTtjLTQuMDk1LTEyLjY5MS0xNC43ODItMTkuMTI5LTIwLjg5OS0zMC4zMjNjLTUuNDMzLTkuOTQ3LTYuNTc2LTIxLjE2Ny0xNS41NzEtMjguMjc4YzcuMTE3LDI0LjA5NSwyMi4zNjQsNDQuNDYzLDM2LjA2MSw2NC43NDgmIzEwOyYjOTsmIzk7YzEwLjk2NCwxNi4yMywxOC40MiwzMS42ODgsMzAuNzMzLDQ0LjY2M2M0LjE4NCw0LjQwMyw4LjkwOCw3LjM1MiwxMy45MzQsMTEuNDczQzEzNC44NTQsNDEwLjE0NiwxNDAuNzQxLDQyMy4xNSwxNTUuODA4LDQyMS4xNjd6JiMxMDsmIzk7JiM5OyBNMTU0LjE2NywzOTMuM2MtMC40NDEtMS43NTUtMy42MDItMi45MzktNS4zMjctMi4wNDZDMTUwLjQyOSwzOTIuMTI4LDE1Mi4xNzUsMzkyLjgzNSwxNTQuMTY3LDM5My4zeiBNMTY5LjMyOSwzODIuNjQ2JiMxMDsmIzk7JiM5O2MtMi43NzYtMy4yMzUtOC41ODgtNC40NjctMTMuOTMyLTYuNTU1Yy02LjYyOS0yLjU5NS0xNi4wODctNS4wNTItMjAuODk4LTIuMDVjMC40ODQsNC4wMjEsMy42ODcsNS4zMjcsNS43MzYsNy43ODUmIzEwOyYjOTsmIzk7YzUuNjkzLDAuODc3LDguOTUxLDMuNjU1LDE0LjM0MSw0LjA5NkMxNjAuOTI5LDM4Ni40NDcsMTY2Ljg2MiwzODYuMTY0LDE2OS4zMjksMzgyLjY0NnogTTM2NC43OTYsNDc2LjA4JiMxMDsmIzk7JiM5O2MtMTIuNC01LjY1NS0zMC41ODYsMC43MDctNDMuODQ4LTIuNDYyYy0yLjUwMy0wLjU5OS00LjcxNi0yLjMyLTYuOTY1LTIuNDU4Yy0yLjIzNy0wLjEzNy00Ljg0MSwxLjA0NC02Ljk2NiwxLjIzMSYjMTA7JiM5OyYjOTtjLTExLjM1NywxLjAxLTIxLjcyNS0wLjExMi0zMi4zNy0xLjY0M2MtNy40NjktMS4wNzMtMTUuNDI0LTEuNDkzLTIyLjEzMi0zLjI3N2MtNi40MjUtMS43MDUtMTMuMDctNS42MzktMTkuNjctOC4xOTYmIzEwOyYjOTsmIzk7Yy02LjY5Ny0yLjU5MS0xMy42NjktNS4xNzMtMjAuMDc5LTcuNzg1Yy0xMi42NDYtNS4xNTItMjYuMDg2LTE0LjA2OC0zOS4zNC0xNy42MTljOC45NDEsOS40OTgsMjQuMzM0LDEyLjU1LDM0LjgzNCwyMC40ODkmIzEwOyYjOTsmIzk7Yy0xNC44MzgtNC4xNS0yNi4wMzQtMTEuOTM5LTM5LjM0LTE3LjYyYzEwLjM2Nyw5LjI4MiwyNC44MzMsMTQuOTA0LDM5LjM0LDIwLjg5NmMxNC40NDcsNS45NzIsMzAuMTQ2LDExLjAyNCw0Ny4xMjIsMTMuNTIzJiMxMDsmIzk7JiM5O0MyODkuMTAzLDQ3Ni4xMjYsMzI4LjY1NCw0ODMuNTAzLDM2NC43OTYsNDc2LjA4eiBNMzc1LjQ1LDQ3NC44NDljLTIuMTA0LDAuMDg0LTQuNzI1LTAuMzU0LTQuOTE1LDEuNjM5JiMxMDsmIzk7JiM5O0MzNzIuMzE4LDQ3OC4wMTgsMzc1LjMxNyw0NzcuODU5LDM3NS40NSw0NzQuODQ5eiBNMzk3LjU3OCw0MjYuNDkzYzAuNTgyLDMuMDI4LDQuOTc4LDIuMTI1LDQuNTEyLTEuMjMmIzEwOyYjOTsmIzk7QzM5OS44NTYsNDI0Ljk0NiwzOTguODg4LDQyNS44OTUsMzk3LjU3OCw0MjYuNDkzeiBNNDMxLjU5LDQ0Ny44MDJjLTExLjAxNi0wLjI2Ni0yNC42MDUtNC4wNzEtMzYuMDYzLTMuNjg1JiMxMDsmIzk7JiM5O2MtNC4zOTYsMC4xNDYtOS43MzksMS4xOTgtMTEuMDYyLDUuNzNjMy4zODEsMS4zNzIsNy4wMDMsMC41NDksMTEuMDYyLDAuNDE2QzQwOC44MTgsNDQ5LjgxNCw0MjUuMDU4LDQ1NS43ODYsNDMxLjU5LDQ0Ny44MDJ6JiMxMDsmIzk7JiM5OyBNNDQyLjY1Niw0NDYuOTgyYy0xLjkxNy0wLjAwNC0yLjQ4MiwxLjM0OC0yLjg2OSwyLjg2NWMwLjUyNywwLjU2NSwxLjc3OSwwLjQxMiwyLjg2OSwwLjQxNiYjMTA7JiM5OyYjOTtDNDQyLjQ2MSw0NDguNDUsNDQzLjIxOCw0NDguMjIyLDQ0Mi42NTYsNDQ2Ljk4MnogTTQ2Ni44MzQsNDQ1LjM0NWMtMi0wLjMwNC0yLjc0NSwyLjE4My0yLjA1LDMuMjgmIzEwOyYjOTsmIzk7YzEuMjg5LDAuMTk1LDEuNjAxLTAuNTg2LDIuNDYxLTAuODIzQzQ2Ny41NDEsNDQ2LjU1LDQ2Ni41MzgsNDQ2LjU5Niw0NjYuODM0LDQ0NS4zNDV6IE01MDAuODQzLDQ0Ny44MDImIzEwOyYjOTsmIzk7Yy04LjM4OS0wLjg5NC0xOC4xODYtMC4zNDEtMjUuODEzLDAuODIzQzQ3OS41MjEsNDUyLjg1NCw0OTUuNjUyLDQ1MC4xNTUsNTAwLjg0Myw0NDcuODAyeiBNMTA2LjYzMywxOTguNjUxJiMxMDsmIzk7JiM5O2M0LjA0MiwyLjI0Niw3Ljc3Miw2Ljk3OCwxMy4xMTQsNi41NThjLTEuNDQzLTEuOTcxLTMuNDg5LTMuMzQxLTQuOTItNS4zMjVjMS41MjItMC4xMiwyLjgxNS0wLjQ2MywzLjI3OS0xLjY0JiMxMDsmIzk7JiM5O2MtNC45ODQtMy40ODctMTEuMzc2LTcuNzQ2LTEzLjkzMi0xMi4yOTdDMTA1Ljg2MSwxODkuMjE2LDEwOC40NDMsMTk0LjQyNCwxMDYuNjMzLDE5OC42NTF6IE0xNTkuMDg2LDIwMS45MzMmIzEwOyYjOTsmIzk7Yy0wLjg3Ny0wLjg5OC0wLjQ4Mi0zLjA3My0xLjY0MS0zLjY4OEMxNTcuMTg0LDIwMC4wMjgsMTU4LjMzOCwyMDIuNTIxLDE1OS4wODYsMjAxLjkzM3ogTTEyMS4zODUsMjM3LjU4NiYjMTA7JiM5OyYjOTtjMC42MjgsNi43NDcsNC45NCw5LjgwNiw1LjMyNywxNi44Yy00Ljc5LTUuNDU0LTcuNDY0LTEzLjAyNy0xMC42NTQtMjAuMDgzYy0wLjMxMyw4LjUzNSwyLjI2NywxMy44MjMsNC41MDgsMTkuNjc0JiMxMDsmIzk7JiM5O2MxLjcyNSw0LjQ5NiwzLjM0Miw5Ljc3Myw3Ljc4NSwxMS4wNjNjMi4wNzUtMC4zODcsMS45NTktMi45NjYsNC4xMDEtMy4yODFjMi4yNzgsMC4zMjgsMy40NjQsMy45MDQsNC45MTUsMy42OTImIzEwOyYjOTsmIzk7Yy0xLjA5NC0xLjIzLTEuNDM1LTMuMjEtMS42MzktNS4zMjdjMC4zOTYtMS41MTgsMi41NjYtMS4yNiwzLjI3Ny0yLjQ2MkMxMzQuODg0LDI0OS4yMTksMTI4Ljk3NywyNDIuNTU3LDEyMS4zODUsMjM3LjU4NnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZmlsbC1ydWxlPSJldmVub2RkIiBkaXNwbGF5PSJpbmxpbmUiPiYjeGE7JiN4YTs8L3BhdGg+JiN4YTsmI3hhOzwvZz4mI3hhOyYjeGE7PC9zdmc+;" parent="1" vertex="1">
50
+ <mxGeometry x="400" y="84.99999999999999" width="60" height="60" as="geometry" />
51
+ </mxCell>
52
+ <mxCell id="edd1Frih5Cjn2J8oHZLm-1" value="Python Virtual Environment" style="outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=12;fontStyle=0;strokeColor=#858B94;fillColor=none;verticalAlign=top;align=center;fontColor=#858B94;dashed=1;spacingTop=3;" vertex="1" parent="1">
53
+ <mxGeometry x="20" y="20" width="610" height="420" as="geometry" />
54
+ </mxCell>
55
+ <mxCell id="edd1Frih5Cjn2J8oHZLm-2" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/svg+xml,PHN2ZyB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMzIgMzIiIGhlaWdodD0iODAwcHgiIHdpZHRoPSI4MDBweCI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDI1MjQzLjA2MSAzODUxOS4xNykgc2NhbGUoMTg5LjM4IDE4OS44MSkiIHkyPSItMjAyLjg0IiB4Mj0iLTEzMy4xOTgiIHkxPSItMjAyLjkxIiB4MT0iLTEzMy4yNjgiIGlkPSJhIj48c3RvcCBzdG9wLWNvbG9yPSIjMzg3ZWI4IiBvZmZzZXQ9IjAiLz48c3RvcCBzdG9wLWNvbG9yPSIjMzY2OTk0IiBvZmZzZXQ9IjEiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgyNTMwOS4wNjEgMzg1ODMuNDIpIHNjYWxlKDE4OS4zOCAxODkuODEpIiB5Mj0iLTIwMy4xMzMiIHgyPSItMTMzLjQ5NSIgeTE9Ii0yMDMuMjAzIiB4MT0iLTEzMy41NzUiIGlkPSJiIj48c3RvcCBzdG9wLWNvbG9yPSIjZmZlMDUyIiBvZmZzZXQ9IjAiLz48c3RvcCBzdG9wLWNvbG9yPSIjZmZjMzMxIiBvZmZzZXQ9IjEiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX3B5dGhvbjwvdGl0bGU+PHBhdGggc3R5bGU9ImZpbGw6dXJsKCNhKSIgZD0iTTE1Ljg4NSwyLjFjLTcuMSwwLTYuNjUxLDMuMDctNi42NTEsMy4wN1Y4LjM2aDYuNzUydjFINi41NDVTMiw4LjgsMiwxNi4wMDVzNC4wMTMsNi45MTIsNC4wMTMsNi45MTJIOC4zM1YxOS41NTZzLS4xMy00LjAxMywzLjktNC4wMTNoNi43NjJzMy43NzIuMDYsMy43NzItMy42NTJWNS44cy41NzItMy43MTItNi44NDItMy43MTJoMFpNMTIuMTUzLDQuMjM3YTEuMjE0LDEuMjE0LDAsMSwxLTEuMTgzLDEuMjQ0di0uMDJhMS4yMTQsMS4yMTQsMCwwLDEsMS4yMTQtMS4yMTRoMFoiLz48cGF0aCBzdHlsZT0iZmlsbDp1cmwoI2IpIiBkPSJNMTYuMDg1LDI5LjkxYzcuMSwwLDYuNjUxLTMuMDgsNi42NTEtMy4wOFYyMy42NUgxNS45ODV2LTFoOS40N1MzMCwyMy4xNTgsMzAsMTUuOTk1cy00LjAxMy02LjkxMi00LjAxMy02LjkxMkgyMy42NFYxMi40cy4xMyw0LjAxMy0zLjksNC4wMTNIMTIuOTc1UzkuMiwxNi4zNTYsOS4yLDIwLjA2OFYyNi4ycy0uNTcyLDMuNzEyLDYuODQyLDMuNzEyaC4wNFptMy43MzItMi4xNDdBMS4yMTQsMS4yMTQsMCwxLDEsMjEsMjYuNTE5di4wM2ExLjIxNCwxLjIxNCwwLDAsMS0xLjIxNCwxLjIxNGguMDNaIi8+PC9zdmc+;" vertex="1" parent="1">
56
+ <mxGeometry x="560" y="34.999999999999986" width="50" height="50" as="geometry" />
57
+ </mxCell>
58
+ <mxCell id="edd1Frih5Cjn2J8oHZLm-3" value="Web UI" style="outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=12;fontStyle=0;strokeColor=#858B94;fillColor=#eceef9;verticalAlign=top;align=center;fontColor=#858B94;dashed=1;spacingTop=3;" vertex="1" parent="1">
59
+ <mxGeometry x="67.99" y="84.99999999999999" width="162.01" height="60.3" as="geometry" />
60
+ </mxCell>
61
+ <mxCell id="edd1Frih5Cjn2J8oHZLm-4" value="" style="image;points=[];aspect=fixed;html=1;align=center;shadow=0;dashed=0;image=img/lib/allied_telesis/computer_and_terminals/Personal_Computer.svg;" vertex="1" parent="1">
62
+ <mxGeometry x="187" y="102.3" width="25.6" height="34.7" as="geometry" />
63
+ </mxCell>
64
+ </root>
65
+ </mxGraphModel>
66
+ </diagram>
67
+ </mxfile>
app/img/arch.png ADDED
app/img/screenshot1.png ADDED
app/img/screenshot2.png ADDED
app/img/screenshot3.png ADDED
app/img/screenshot4.png ADDED
app/src/.chroma/index/id_to_uuid_18500a7b-46d2-445b-8784-39e15ba7d6aa.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5c2f0b92dcdf96b41850939bbec8acd7367885363038b33e018be872d92b8485
3
+ size 440
app/src/.chroma/index/id_to_uuid_1f26b323-cf71-4c5f-8de2-d0b01755e071.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b5ddd18ea8f28c791737751e8cf21f5f0724ed8a9a2b46f8d23e5b09c47d1d05
3
+ size 411
app/src/.chroma/index/id_to_uuid_5cd68c7d-6197-40ca-b7ba-fdee86ae36cb.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:02ddb9ed78333fb1734e279773e97987fb7a9bfd3b43cc7ac042ead8af097166
3
+ size 414
app/src/.chroma/index/id_to_uuid_8e6aa70e-03df-4edb-8ef5-da9c9fcae3a0.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c4c56348c6979ba1233505e05ca8f62772010a0c1a80c872806938370fb6deca
3
+ size 256
app/src/.chroma/index/id_to_uuid_98601f80-2812-460f-ac0a-961a6f41ad49.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:36ecf9d81f971c7f6e2b99b60485a43c70d9b1e8a9d2c8cc1c2d6def3572b5ed
3
+ size 411
app/src/.chroma/index/id_to_uuid_aecd8ed4-2aee-463f-acc5-24060abeea9c.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a900dafbc4cb39ae01a69ec5c720fc38e2f7f921842c70cf1cbee16df9cb7ea7
3
+ size 605
app/src/.chroma/index/id_to_uuid_c88e82f5-91b9-47eb-8627-d02fdcb0a76e.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4cc0968152649d9ad807a9daffe8d9328ea5a6d8e5d1f1eea62aa336c0484058
3
+ size 601
app/src/.chroma/index/index_18500a7b-46d2-445b-8784-39e15ba7d6aa.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0e2a2dc14d24d6846ec5f896ce26a579cbcd5895803d0ead00418ec2ab4b7e3e
3
+ size 81840
app/src/.chroma/index/index_1f26b323-cf71-4c5f-8de2-d0b01755e071.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f46e2a0170649d772f9a6b7eca122a1ada7bb3e68500ed6d3228ff1ac976436c
3
+ size 75552
app/src/.chroma/index/index_5cd68c7d-6197-40ca-b7ba-fdee86ae36cb.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bd1b9ac0c9449e11ceb7eb4ecf3773cdbcbc220e60a9bab62542e13acc166e78
3
+ size 75552
app/src/.chroma/index/index_8e6aa70e-03df-4edb-8ef5-da9c9fcae3a0.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1cb4ea51b7d5db4e6a417db95b6a35ea11a2f47792a85fe66d3384cd0ab2f648
3
+ size 44112
app/src/.chroma/index/index_98601f80-2812-460f-ac0a-961a6f41ad49.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6884ebbdb05f5efb95097ffaf12d014cb75bfa1286af3d73bfd2b07393b2f96e
3
+ size 75552
app/src/.chroma/index/index_aecd8ed4-2aee-463f-acc5-24060abeea9c.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:134c2fbc16aeb39f65e0e65f37ae741c33fa609a03a5f7064a5aca433fe14f69
3
+ size 113348
app/src/.chroma/index/index_c88e82f5-91b9-47eb-8627-d02fdcb0a76e.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:36f2eaba01a4f649facfd5e55ec9aa1113c8004ec0cee12fab061c25646df7cd
3
+ size 113348
app/src/.chroma/index/index_metadata_18500a7b-46d2-445b-8784-39e15ba7d6aa.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:afa6950679c7c52d877e1a335cf1e3c096a4761be4070004cc6c868521380e2a
3
+ size 103
app/src/.chroma/index/index_metadata_1f26b323-cf71-4c5f-8de2-d0b01755e071.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5832bc1f58c7b1f805fa9e4aa3528a997bb85e3b39bb7a116c0e8c79e3261635
3
+ size 103
app/src/.chroma/index/index_metadata_5cd68c7d-6197-40ca-b7ba-fdee86ae36cb.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a83870b2a825348ae62f3bd92df8e7ca99914ab43edc997082b47c26d27597ec
3
+ size 103
app/src/.chroma/index/index_metadata_8e6aa70e-03df-4edb-8ef5-da9c9fcae3a0.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:616fac09114ff9979946d7074eb560adceb35430e9211e3360c260a7ed77f108
3
+ size 103
app/src/.chroma/index/index_metadata_98601f80-2812-460f-ac0a-961a6f41ad49.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:64a0fb982d7cbdb5562dfdfb5fb1e36f4505f317e5e3df6aa723ae71ad114569
3
+ size 103
app/src/.chroma/index/index_metadata_aecd8ed4-2aee-463f-acc5-24060abeea9c.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b47ef97851cb38ce474b380dd7aee44bfa01c994db9ed9c23c7735d561e81d78
3
+ size 103
app/src/.chroma/index/index_metadata_c88e82f5-91b9-47eb-8627-d02fdcb0a76e.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ee6c17d301adae17a1f8f173371320035a9df135afbc1add4614ed8ad32f46d0
3
+ size 103
app/src/.chroma/index/uuid_to_id_18500a7b-46d2-445b-8784-39e15ba7d6aa.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f56d1a4c8cc36a8457e1fda9947127cb6ee4d001a48dc67607832920deeaf7a1
3
+ size 497
app/src/.chroma/index/uuid_to_id_1f26b323-cf71-4c5f-8de2-d0b01755e071.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e82935ef1d5da2901b15e6b7f4a5d77b797ced05e5301cd628b14598c7478374
3
+ size 460
app/src/.chroma/index/uuid_to_id_5cd68c7d-6197-40ca-b7ba-fdee86ae36cb.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:450b0b3b22037402c987495fa68575bc411c6c4bc94bbd2ea15396d1f25720ee
3
+ size 460
app/src/.chroma/index/uuid_to_id_8e6aa70e-03df-4edb-8ef5-da9c9fcae3a0.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:acadc39a305eaf47647010e42a55e4e6af249451ae8291387d26fd3390a7df39
3
+ size 275
app/src/.chroma/index/uuid_to_id_98601f80-2812-460f-ac0a-961a6f41ad49.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c85721fec40927a3964a44fe243cee50abdbedeeeda67ac7bfd0482f41904f63
3
+ size 460
app/src/.chroma/index/uuid_to_id_aecd8ed4-2aee-463f-acc5-24060abeea9c.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7e40d80a7cf407e186222ecc7639af4ef9049ba2cd03d4d359d4373bed9c1c7c
3
+ size 682
app/src/.chroma/index/uuid_to_id_c88e82f5-91b9-47eb-8627-d02fdcb0a76e.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:219dd6f20b9fd2ff5a8dc47881b4b5c11a06a840c2d1f4f7d0a2d0125a5a422d
3
+ size 682
app/src/__pycache__/llm.cpython-311.pyc ADDED
Binary file (3.74 kB). View file
 
app/src/app.py ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, render_template, request, Markup
2
+ import llm
3
+
4
+ app = Flask(__name__)
5
+
6
+ @app.route('/', methods=['GET', 'POST'])
7
+ def index():
8
+ try:
9
+ if request.method == 'POST':
10
+ if "openApiKey" in request.form:
11
+ print("POST - openApiKey")
12
+ openApiKey = request.form['openApiKey']
13
+ envApiResponse = llm.setOpenApiKey(openApiKey)
14
+ if envApiResponse:
15
+ print("POST - openApiKey - envApiResponse: ", envApiResponse)
16
+ return render_template('index.html', output='', show_question_input=True)
17
+ else:
18
+ return render_template('index.html', output='', show_question_input=False, error_message="Incorrect secret text.")
19
+ else:
20
+ if 'query' in request.form:
21
+ print("POST - query")
22
+ query = request.form['query']
23
+ output = llm.askQuestion(query)
24
+ output = Markup(f'<span class="underlined">Question</span> : <br>{query}<br><br>Anwser: <br>{output}')
25
+ return render_template('index.html', output=output, show_question_input=True)
26
+ return render_template('index.html', output='', show_question_input=True)
27
+ return render_template('index.html', output='', show_question_input=False)
28
+ except Exception as e:
29
+ print(e)
30
+ print(request.form)
31
+ return render_template('index.html', output='', show_question_input=False, error_message=e)
32
+
33
+ @app.after_request
34
+ def add_no_cache(response):
35
+ response.headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0'
36
+ response.headers['Pragma'] = 'no-cache'
37
+ response.headers['Expires'] = '-1'
38
+ return response
39
+
40
+ if __name__ == '__main__':
41
+ app.run(host="0.0.0.0", debug=True, port=5005)
app/src/docs/HR_Leave_policy.txt ADDED
@@ -0,0 +1,203 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1. Document Purpose
2
+ This document outlines the policy on vacation days for all associates (both permanent associates, contractors and
3
+ trainees) employed by ThoughtFocus Bangalore and Hyderabad. This policy is not optional and will be followed at
4
+ all times. Any questions on this policy should be posted to HR.
5
+ Please note that updated versions of this policy will be published as and when required and that any such revision
6
+ will immediately take force and replace the previous version. It is the responsibility of all associates to make sure
7
+ that they are in compliance with the current version of this policy
8
+ 2. Governing principles
9
+ ThoughtFocus encourages its associates to make time available for rest, recreation and fulfilling family/social
10
+ obligations, as well as to pursue individual needs and aspirations.
11
+ Leave Year: Calendar year, 1st January to 31st December.
12
+ 2.1 Leave Types
13
+ 2.1.1. Earned Leaves
14
+ Earned Leave is provided for planned leaves for the purpose of meeting personal needs
15
+ • All full-time associates are eligible for a total of 18 earned/paid leaves in a calendar year at the rate of 1.5
16
+ days for every month of service with the company. However, the associates will receive the credit in
17
+ advance on a half yearly basis, ie: - in the beginning of January and July for the succeeding six months.
18
+ Hence the leave credit would be 9 days for every half year.
19
+ • For new joiners, the leave is prorated based on the month and date of joining. Please refer to Section #3
20
+ for more information.
21
+ • Balance in earned leaves at the end of calendar year (31st December) will be carried forward to next year
22
+ up to maximum limit of 40 days, all leaves beyond this will lapse by default.
23
+ • Due to the pandemic situation, there will be no restriction on the maximum limit to carry forward the
24
+ remaining earned leaves for the next calendar year 2023.
25
+ • At the Time of Separation: Leave balance as on the last day of working is encashed for a relieving associate
26
+ and is paid along with full and final settlement. The encashment will be calculated on the basic salary.
27
+ • A trainees’ eligibility for leaves is for one day per month during the training period.
28
+ 2.1.2 Consultant Earned Leave – All independent consultants and consultants on third party payroll are eligible for
29
+ 1 earned leave per month. The earned leave can be carried forward until the end of their SOW period. Balance
30
+ Leaves (if any) shall expire upon expiry of SOW period and cannot be encashed.
31
+ TF_HR_Leave Policy _Version 10.0
32
+ Copyright © 2023, ThoughtFocus Internal Page 6 of 10
33
+ 2.1.3 Casual Leaves
34
+ Casual leave is provided to take care of urgent and unplanned personal needs of associates.
35
+ • All associates (except contract associates) are eligible for a total of 6 casual leaves in a calendar year at a
36
+ rate of 0.5 days for every month of service with the company.
37
+ • The associates will receive the credit in advance on a half yearly basis, ie:- in the beginning of January and
38
+ July for the succeeding six months. Hence the leave credit would be 3 days for every half year.
39
+ • For new joiners, the leave is prorated based on the month and date of joining. Please refer to Section #3
40
+ for more information.
41
+ • Any balance in casual leave of the calendar year cannot be carried forward to the next calendar year nor
42
+ can it be encashed at the end of the calendar year.
43
+ • At the Time of Separation: Casual Leave balance is not encashed for a relieving associate.
44
+ • Trainees are eligible for casual leaves during the training period.
45
+ 2.1.4 Special Leaves:
46
+ 2.1.4.1 Maternity Leave:
47
+ • As per Maternity Act of 1961, women associates with minimum 80 days of service with the organization
48
+ are eligible for maternity leave of 26 weeks. The maternity leave can be availed 8 weeks before the
49
+ expected date of delivery or immediately after the delivery.
50
+ • Maternity benefits will also be applicable to parents of the adopted children and to parents of children
51
+ under legal guardianship as per the maternity benefits act.
52
+ • Extension of Maternity Leave: Women employee is allowed to extend the maternity leave for a period of
53
+ 3 months which would be considered as Loss of pay. However, advance intimation on extension needs
54
+ to be communicated before going on maternity leave.
55
+ • In the case of women associates availing maternity leave during probation, the period of probation shall
56
+ stand extended to the extent of maternity leave availed.
57
+ 2.1.4.2 Paternity Leave:
58
+ • Male associates post the completion of 90 days of service with the organization are eligible for 5 days
59
+ of Paternity leave for first 2 kids within the first 3 months of becoming a parent.
60
+ • Paternity benefits will also be applicable to parents of the adopted children and the parents of children
61
+ legal guardianship as per the maternity benefits act.
62
+ 2.1.4.3 Marriage Leave:
63
+ • Associates who are getting married are eligible for 5 days of marriage leave.
64
+ TF_HR_Leave Policy _Version 10.0
65
+ Copyright © 2023, ThoughtFocus Internal Page 7 of 10
66
+ 2.1.4.4 Bereavement Leave:
67
+ �� All Associates are eligible for 3 days of bereavement leave during the death of an immediate family
68
+ member.
69
+ 1.1. Company Declared Holidays
70
+ ThoughtFocus will observe 12 public holidays on working days per year categorized as 6 Mandatory Holidays,
71
+ 4 Restricted Holidays and 2 Floater holidays. The list of holidays for each office will be issued in the month of
72
+ December of the preceding year and will be uploaded on the intranet portal.
73
+ The list of holidays would be specific to city, state and practice; hence a separate list of holidays would be
74
+ published for every location. The published holiday list is applicable to all associates (permanent or contractor
75
+ or consultants) working at ThoughtFocus facility.
76
+ 2.1.3.3 Compensatory Leave (Comp Off):
77
+ • At times when associates are requested to work on weekends or declared holidays to take on additional
78
+ work load. In order to compensate the time spent, compensatory offs can be provided to the associate.
79
+ It is the responsibility of the reporting manager to justify the need of compensatory working and get
80
+ necessary approvals for the same before requesting associates to work on such days. The associates
81
+ are required to follow the leave application process on the Leave Management System for availing
82
+ compensatory offs.
83
+ • Compensatory offs earned during the month must be utilized within 180 days of earning it. If not, the
84
+ same will be lapsed.
85
+ • Only approved comp offs can be availed.
86
+ • Compensatory offs which has not been approved within 90 days cannot be availed.
87
+ • Working additional days/hours to cover for the lost man hours during a normal working day will not
88
+ qualify for compensatory offs.
89
+ • Any deviation to the above for HCC will be considered as per customer recommendations.
90
+ 2.2 Operative Guidelines
91
+ • All leaves should be applied & approved through the Leave Management System in advance.
92
+ • Associate should ensure that there is a backup resource planned during his/her absence.
93
+ • In case of sickness or emergency leave, associates need to communicate to the reporting manager before
94
+ 8am either by phone or through email. Such leaves must be applied immediately after returning to work on
95
+ Leave Management System.
96
+ • Reporting Manager should approve/reject leave applications on the system within one day of submission
97
+ by the team member.
98
+ • Associates should return to work immediately after the pre-approved vacation time, extending it further is
99
+ not allowed unless it is an emergency.
100
+ TF_HR_Leave Policy _Version 10.0
101
+ Copyright © 2023, ThoughtFocus Internal Page 8 of 10
102
+ • The standard operating hours for the company is 9 ½ hours a day. Attendance for less than 4 ½ hours is
103
+ treated as full day absence.
104
+ • Excess leave availed than the available paid leave balance is treated as loss of pay. Any salary adjustment
105
+ or recovery to offset the number of days without pay will reflect in the next pay cycle.
106
+ • It is expected that associates do not avail leaves beyond the available number of leaves. However, in
107
+ exceptional cases, to meet personal exigencies associates may avail this with the prior approval of the
108
+ reporting manager and HR. If it is observed that an associate has established an LOP pattern, the company
109
+ may initiate disciplinary actions.
110
+ • Where an associate on probation is granted leave without pay, the period of probation shall stand extended
111
+ to the extent of the period of leave without pay granted.
112
+ • Where an associate goes on leave during notice period, the notice period will be extended to the extent of
113
+ absent days during the period.
114
+ • Attendance is tracked through the access control system. First swipe of the day and last swipe of the day
115
+ is considered for calculating total hours spent in the office.
116
+ • Absenteeism without any approval from Manager and HR for more than 3 consecutive working days would
117
+ result in termination of employment.
118
+ • In case of availing any special leave (bereavement, marriage, maternity or paternity), associates are
119
+ required to inform reporting manager and HR.
120
+ 3. Leave credits and adjustments
121
+ 3.1 Earned Leaves
122
+ Leave credit for a newly joined permanent associate for the first month of service will be based on the table below.
123
+ Remaining leaves for the balance half year will be added to the eligible leave for the first month (based on this table)
124
+ and will be credited to the associate at the time of joining. For eg:- if an associate joins on 7th February, he would
125
+ get a leave credit of 7 days (1day for February + 6 days for the period from March –June) at the time of joining.
126
+ Joining
127
+ Date
128
+ No. of days of leave credit for
129
+ the month
130
+ 1-6
131
+ th 1.5 days
132
+ 7-15th 1 day
133
+ 16 - 20th 0.5 day
134
+ 21- 30th 0.0 day
135
+ Leave credit for a newly joined contract associate for the month will be based on the table below. Next month
136
+ onwards, 1 leave per month will be credited to the earned leave balance of the contractor. For eg:- if a contract
137
+ associate joins on 18th February, he would get a leave credit of 0.5 day for February. March month onwards,
138
+ contractor will have a leave credit of 1 day per month.
139
+ Joining Date No. of days leave credit for
140
+ the month
141
+ 1st-10th 1.5 day
142
+ TF_HR_Leave Policy _Version 10.0
143
+ Copyright © 2023, ThoughtFocus Internal Page 9 of 10
144
+ 11th - 20th 0.5 day
145
+ 21st – 30th 0 day
146
+ Associates who are relieved as voluntary termination of service, will get the leave credit based on their date of
147
+ relieving as per the table below. Any advance leave credit given to the associate for the remaining half year and
148
+ any advance leaves availed will be adjusted in the full and final settlement. E.g.: - If an associate gets relieved on
149
+ 16th February, his earned leave balance would be lesser by 6.5 days (0.5 days of February + 6 days of leave credit
150
+ received till June) although he would have got the credit till end of June during the beginning of the year.
151
+ Relieving Date No. of days leave credit for
152
+ the month
153
+ 1-6
154
+ th 0.0 day
155
+ 7-15th 0.5 day
156
+ 16 - 20th 1 day
157
+ 21- 30th 1. 5 days
158
+ In case of involuntary termination of services, the last day of working will be agreed with the associate, manager
159
+ and HR and no further leave credit post the last working day if the relieving date is different from the last working
160
+ day.
161
+ 3.2 Casual Leaves
162
+ Leave credit for a newly joined associate for the first month of service will be based on the table below. Remaining
163
+ leaves for the balance half year will be added to the eligible leave for the first month (based on this table) and will
164
+ be credited to the associate at the time of joining. For e.g.: - if an associate joins on 7th February, he would get a
165
+ leave credit of 2.5 days (0.5 day for February + 2 days for the period from March –June) at the time of joining.
166
+ Joining Date No. of days leave credit
167
+ 1-20th 0.5 day
168
+ 21- 30th 0.0 day
169
+ Associates who are relieved will get the leave credit based on their date of relieving as per the table below. Any
170
+ advance leave credit given to the associate for the remaining half year and any advance leaves availed will be
171
+ adjusted in the full and final settlement.
172
+ Eg:- If an associate gets relieved on 15th February, his leave balance would be lesser by 2.5 days (0.5 days of
173
+ February + 2 days of leave credit received till June) although he would have got the credit till end of June during
174
+ the beginning of the year.
175
+ Relieving Date No. of days leave credit for
176
+ the month
177
+ 1-20th 0day
178
+ 21- 30th 0.5 day
179
+ TF_HR_Leave Policy _Version 10.0
180
+ Copyright © 2023, ThoughtFocus Internal Page 10 of 10
181
+ 3.3 Earned leave credit on loss of pay: - (Illustration)
182
+ Particulars No. of Days
183
+ Total days in the month 31
184
+ Loss of pay days 1st to 15th of the month 15
185
+ Actual worked days 16
186
+ Leave credit for the month 0.77
187
+ Rounded off to the nearest 0.5 1
188
+ 4. Loss of Pay (LOP) calculation
189
+ 1. On LOP, if an associate avail leave on the last working day of the week and then reports back to work from
190
+ the next working day/Monday then the actual days to be accounted is only the working days missed. In this
191
+ case, any holidays/weekends falling in between the last working day and next working day will not be
192
+ considered for calculation of LOP days.
193
+ 2. On LOP, if an associate avail leave between two weeks {ex: continuously between Friday/last working day
194
+ (Week 1) and Monday/first working day (week2) both days inclusive}, then the total days accounted for LOP
195
+ would include the weekends (Sat/Sun) or any holidays falling in-between.
196
+ 3. On LOP, if an associate avail leave between Monday to Friday of the same week, then the total days to be
197
+ considered for the loss of pay are the actual working days - 5 days.
198
+ 5. Out of office duty/Seminars/Conferences/Client and Work from
199
+ Home
200
+ Associates performing outside office duty such as attending seminars, conferences, client office, visiting consulate
201
+ etc. should exercise the options on Leave Management System to avoid confusions in attendance recordings. Same
202
+ is applicable while the associate avails Work from Home option. All entries should be made on or prior to the date
203
+ of availing these options. Entry in Leave Management System & timesheet should be made accordingly.
app/src/docs/HR_Work_from_home.txt ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Document Purpose
2
+ This document outlines work from home policy for all permanent employees, probationers, contractors and trainees employed by ThoughtFocus Bangalore. This policy is not optional and will be followed at all times. Any questions on this policy should be posted to HR.
3
+ Please note that updated versions of this policy will be published as and when required and that any such revision will immediately take force and replace the previous version. It is the responsibility of all employees to make sure that they are in compliance with the current version of this policy.
4
+
5
+ 2. Governing Principles
6
+ 2.1 Purpose
7
+ • Working from Home is an option provided to associates based on the needs, roles and responsibilities, hence requires prior approval from the Reporting Manager.
8
+ • This option is to be exercised where the company‟s business needs warrants the associate‟s attention when in fact the associate has an inability to be present at the normal place of work. 2.2 Scope and applicability
9
+ • Thoughtfocus associates have the option of availing upto 2 days of Work from Home in any given month. Given the current pandemic situation work from home policy is extended for a full month.
10
+ • When associates apply for Work from home, it is incumbent upon them to ensure their availability to the team and they have the environment available to be fully productive during the day without any disruption or outage during the working hours.
11
+ • Following are the circumstances and arrangements where a work from home may be allowed:
12
+ o The customer or the manager has requested for attending business work at non working hours.
13
+ o When the associate has a personal commitment or a medical condition where in he/she is unable to travel to work but can be productive to the optimum.
14
+ o Associate has work which can be attended from home and which could be completed even though they are working remotely.
15
+ o Associate has to make his/her own arrangement for the internet and telephone usage while working from home.
16
+ • Despite any pre-authorized home working arrangements, if the associate is required to attend office for internal/external meetings, office briefings etc, they are expected to do so once they receive such requests.
17
+
18
+ 2.3 Restrictions
19
+
20
+ • Associate must have a company provided laptop to work. Use of home computer system is not allowed.
21
+
22
+ 2.4 Confidentiality
23
+
24
+ • While working from home employees will remain subject to all confidentiality clauses contained within their contract of employment. The associate would be bound by all clauses mentioned in the NDA during their course of working from home.
25
+
26
+ 2.5 General Guidelines
27
+
28
+ • Associates can apply “Work from Home” on the Leave Management System for the current week until Monday of the next week. (Ex: For 3rd Sep – 7th Sep of 2018, the system allows to apply on the tool until 10th of September)
29
+ • If Monday is a mandatory holiday (only mandatory holidays, not restricted or Floater holidays), the submission can be done till Tuesday.
30
+ • Any unapplied work from home would be considered as Loss of Pay while consolidating leave data at the end of every month.
31
+ • Work from Home requests through emails will only be considered in situation of Leave Management system is non-functional on the day of availing Work from home.
32
+ • All efforts must be put in place to ensure that availing work from home would not turn out to be a regular feature for the associates‟ working arrangements. Though it is not possible to give an absolute definition of „occasional‟, but it is not intended that:
33
+ o People establish regular routines, e.g. of always working from home on Fridays o Working from home seems to take precedence over other project activities.
34
+ • The reporting manager will be responsible for monitoring the associate‟s performance while working occasionally from home.
35
+ • While working from home, an individual is still at work. Thought it is not intended that there will be a detailed monitoring system put in place, associates must be as contactable as they would be on any other working day. It is expected that they will respond to email and telephone calls. In some circumstances, they might still be needed to come into the office during the day.
36
+ • In cases where an associate requires extended work from home option due to exigencies or any other unavoidable reasons, the same needs to be discussed and approved by the reporting manager, HR team and delivery head before availing the same. Lack of prior approval in such cases would not qualify for an extended work from home.
37
+
app/src/docs/Hr_induction.txt ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1. Document purpose
2
+ This document provides guidelines for induction & probation of the associates. Any questions on this policy should be posted to HR.
3
+ Please note that updated versions of this policy will be published as and when required and that any such revision will immediately take force and replace the previous version. It is the responsibility of all associates to make sure that they are in compliance with the current version of this policy.
4
+
5
+ 2. Governing principles
6
+ Induction is a systematic process of introducing and acculturating associate members to the organization, exposing them to organization structure, systems, procedures norms, polices and the specificity of their respective functions and job responsibilities. Induction is the first step in building a long-standing relationship between the new associate and the organization.
7
+ The permanent associate will serve probation for a period of six months from the date of joining, during which time their suitability for the position will be appraised by the reporting manager. Based on written communication from the manager, the employment will be confirmed in writing. It shall be the responsibility of the reporting manager to ensure that adequate support and guidance is provided to an associate during probation with a view to facilitating her/his performance.
8
+
9
+ 3. Day One Joining Formalities
10
+ The first step would be to collect and verify the documents of the new joiner.
11
+
12
+ 3.1 Joining Documents: New joiner whether on permanent or on contract are required to submit below documents on the day of joining, given the current situation documents are shared through email.
13
+ • Credentials (10th, Pre-University or 12th Grade marks card, degree marks card)
14
+ • Permanent Account Number card.
15
+ • Recent passport sized photographs - 3 copies (on white background)
16
+ • Previous employment letters (last 3 companies offer, experience & relieving, if applicable)
17
+ • Latest 3 months pay slips
18
+ • Previous Employer reference
19
+ • Aadhar card number
20
+ • Passport Copy
21
+ • Any Address proofs
22
+ • UAN Number
23
+
24
+
25
+ 3.2 Day One Activities by HR:
26
+
27
+ 1. Collection, verification of all documents - The original documents are verified and returned; copy of self-attested documents is retained for the HR record.
28
+ 2. Creation of GAID.
29
+ 3. Helps associate to fill up the details on HRMS application.
30
+ 4. Facility tour and introduction to the functional heads.
31
+ 5. Conduct employee background verification.
32
+ During the pandemic situation, the process took place virtually.
33
+
34
+ 3.3 Day One Activities by Admin & facilities team:
35
+ 1. Induction on Admin & facilities
36
+ 2. Opening salary account with a Bank
37
+ 3. Application for group Mediclaim policy
38
+ 4. Issue of ID Access card
39
+ 5. Provident Fund account opening
40
+ 6. Parking pass requirement
41
+ 7. Issue of Business card – depending on the role.
42
+ During the pandemic situation, process took place virtually
43
+
44
+
45
+ 3.4 Day One Activities by Infrastructure Team (IT Team):
46
+ 1. Induction on dos and don’ts of IT infrastructure facilities
47
+ 2. Creation & configuration of email ID, login credentials.
48
+ 3. Issue of System – laptop/desktop
49
+ During the pandemic situation, process took place virtually. Laptops were sent through courier services for outstation new joiners.
50
+
51
+
52
+ 3.5 Handover to the technical Team
53
+ After the associate has gone through all the day one activities, the HR team hands over the new joiner to the reporting manager for project induction.
54
+
55
+ 3.6 Induction
56
+ 1. HR Induction will happen every Thursday
57
+ 2. Connect & Experience (Org overview, Finance, QMS awareness session & Leadership connect) will happen every 2nd and 4th Friday of the month
58
+
59
+ 3.7 Client Access control & provision
60
+ The required information / documents are shared with the respective Project Manager to be sent to the client in order to obtain the necessary access control for client environment. HR will notify joining of the respective project associates. The Project Manager will notify their respective client managers to grant access control for their respective environment.
61
+
62
+ 4. Confirmation Process
63
+ For an employee to be confirmed, he/she must complete a minimum of 6 (six) months with ThoughtFocus. A performance evaluation of the employee is initiated by HR, two weeks before the expected date of confirmation, through the reporting manager. Based on the feedback and recommendation by the reporting manager the employee is confirmed. A confirmation letter will be handed over to the associate on the successful completion of probation.
64
+ The probation can be extended if the performance indices of the associate are not satisfactory. Such cases must be taken up for re-evaluation as per the timeline set by the reporting manager.
app/src/llm.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from langchain.chains import RetrievalQA
2
+ from langchain.llms import OpenAI
3
+ from langchain.document_loaders import TextLoader
4
+ from langchain.document_loaders import DirectoryLoader
5
+ from langchain.indexes import VectorstoreIndexCreator
6
+ import os
7
+ from getpass import getpass
8
+
9
+ ###### GLOBALS
10
+ docsDir = ''
11
+ qa = ''
12
+
13
+ ####### FUNCTIONS
14
+ def setOpenApiKey(openApiKey):
15
+ print("setOpenApiKey")
16
+ try:
17
+ OPENAI_API_KEY = openApiKey
18
+ os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY
19
+ except:
20
+ print("Invalid key. Please try again.")
21
+ init()
22
+ return True
23
+
24
+ def pdfLoader(path):
25
+ print("Startng pdfLoader")
26
+ from langchain.document_loaders import PyPDFLoader
27
+ from langchain.text_splitter import CharacterTextSplitter
28
+ from langchain.embeddings import OpenAIEmbeddings
29
+ from langchain.vectorstores import Chroma
30
+ loader = PyPDFLoader(path)
31
+ documents = loader.load_and_split()
32
+ text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
33
+ texts = text_splitter.split_documents(documents)
34
+ embeddings = OpenAIEmbeddings()
35
+ db = Chroma.from_documents(texts, embeddings)
36
+ retriever = db.as_retriever(search_type="similarity", search_kwargs={"k":2})
37
+ qa = RetrievalQA.from_chain_type(
38
+ llm=OpenAI(), chain_type="stuff", retriever=retriever, return_source_documents=True)
39
+ return qa
40
+
41
+ def directoryLoader(path):
42
+ print("directoryLoader")
43
+ # Documentation : https://python.langchain.com/en/latest/modules/indexes/document_loaders/examples/directory_loader.html
44
+ loader = DirectoryLoader(path)
45
+ documents = loader.load()
46
+ from langchain.text_splitter import CharacterTextSplitter
47
+ text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
48
+ texts = text_splitter.split_documents(documents)
49
+ from langchain.embeddings import OpenAIEmbeddings
50
+ embeddings = OpenAIEmbeddings()
51
+ from langchain.vectorstores import Chroma
52
+ db = Chroma.from_documents(texts, embeddings)
53
+ retriever = db.as_retriever()
54
+ qa = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", retriever=retriever)
55
+ return qa
56
+
57
+ def init():
58
+ print("init")
59
+ global docsDir
60
+ docsDir = 'docs/'
61
+ global qa
62
+ qa = directoryLoader(docsDir)
63
+ #qa = pdfLoader("pdf/test.pdf")
64
+
65
+ def askQuestion(query):
66
+ # TXT
67
+ returnString = qa.run(query)
68
+ # PDF
69
+ # output = qa({"query": query})
70
+ # returnString = str(output['result'])
71
+ return returnString
app/src/requirements.txt ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # chromadb
2
+ # langchain
3
+ # chromadb
4
+ # tiktoken
5
+ # Flask
6
+ # unstructured
7
+
8
+
9
+ aiohttp==3.8.4
10
+ aiosignal==1.3.1
11
+ anyio==3.6.2
12
+ argilla==1.6.0
13
+ async-timeout==4.0.2
14
+ attrs==23.1.0
15
+ backoff==2.2.1
16
+ certifi==2022.12.7
17
+ charset-normalizer==3.1.0
18
+ chromadb==0.3.21
19
+ click==8.1.3
20
+ clickhouse-connect==0.5.20
21
+ cmake==3.26.3
22
+ commonmark==0.9.1
23
+ dataclasses-json==0.5.7
24
+ Deprecated==1.2.13
25
+ duckdb==0.7.1
26
+ et-xmlfile==1.1.0
27
+ fastapi==0.95.1
28
+ filelock==3.12.0
29
+ Flask==2.2.3
30
+ frozenlist==1.3.3
31
+ greenlet==2.0.2
32
+ h11==0.14.0
33
+ hnswlib==0.7.0
34
+ httpcore==0.16.3
35
+ httptools==0.5.0
36
+ httpx==0.23.3
37
+ huggingface-hub==0.13.4
38
+ idna==3.4
39
+ importlib-metadata==6.6.0
40
+ itsdangerous==2.1.2
41
+ Jinja2==3.1.2
42
+ joblib==1.2.0
43
+ langchain==0.0.147
44
+ lit==16.0.1
45
+ lxml==4.9.2
46
+ lz4==4.3.2
47
+ Markdown==3.4.3
48
+ MarkupSafe==2.1.2
49
+ marshmallow==3.19.0
50
+ marshmallow-enum==1.5.1
51
+ monotonic==1.6
52
+ mpmath==1.3.0
53
+ msg-parser==1.2.0
54
+ multidict==6.0.4
55
+ mypy-extensions==1.0.0
56
+ networkx==3.1
57
+ nltk==3.8.1
58
+ numexpr==2.8.4
59
+ numpy==1.23.5
60
+ nvidia-cublas-cu11==11.10.3.66
61
+ nvidia-cuda-cupti-cu11==11.7.101
62
+ nvidia-cuda-nvrtc-cu11==11.7.99
63
+ nvidia-cuda-runtime-cu11==11.7.99
64
+ nvidia-cudnn-cu11==8.5.0.96
65
+ nvidia-cufft-cu11==10.9.0.58
66
+ nvidia-curand-cu11==10.2.10.91
67
+ nvidia-cusolver-cu11==11.4.0.1
68
+ nvidia-cusparse-cu11==11.7.4.91
69
+ nvidia-nccl-cu11==2.14.3
70
+ nvidia-nvtx-cu11==11.7.91
71
+ olefile==0.46
72
+ openai==0.27.4
73
+ openapi-schema-pydantic==1.2.4
74
+ openpyxl==3.1.2
75
+ packaging==23.1
76
+ pandas==1.5.3
77
+ Pillow==9.5.0
78
+ posthog==3.0.1
79
+ pydantic==1.10.7
80
+ Pygments==2.15.1
81
+ pypandoc==1.11
82
+ python-dateutil==2.8.2
83
+ python-docx==0.8.11
84
+ python-dotenv==1.0.0
85
+ python-magic==0.4.27
86
+ python-pptx==0.6.21
87
+ pytz==2023.3
88
+ PyYAML==6.0
89
+ regex==2023.3.23
90
+ requests==2.28.2
91
+ rfc3986==1.5.0
92
+ rich==13.0.1
93
+ scikit-learn==1.2.2
94
+ scipy==1.10.1
95
+ sentence-transformers==2.2.2
96
+ sentencepiece==0.1.98
97
+ six==1.16.0
98
+ sniffio==1.3.0
99
+ SQLAlchemy==1.4.47
100
+ starlette==0.26.1
101
+ sympy==1.11.1
102
+ tenacity==8.2.2
103
+ threadpoolctl==3.1.0
104
+ tiktoken==0.3.3
105
+ tokenizers==0.13.3
106
+ torch==2.0.0
107
+ torchvision==0.15.1
108
+ tqdm==4.65.0
109
+ transformers==4.28.1
110
+ triton==2.0.0
111
+ typing-extensions==4.5.0
112
+ typing-inspect==0.8.0
113
+ unstructured==0.6.1
114
+ urllib3==1.26.15
115
+ uvicorn==0.21.1
116
+ uvloop==0.17.0
117
+ watchfiles==0.19.0
118
+ websockets==11.0.2
119
+ Werkzeug==2.2.3
120
+ wrapt==1.14.1
121
+ XlsxWriter==3.1.0
122
+ yarl==1.9.1
123
+ zipp==3.15.0
124
+ zstandard==0.21.0
125
+ pypdf
app/src/templates/index.html ADDED
@@ -0,0 +1,273 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1">
7
+ <link href="https://fonts.googleapis.com/css?family=Poppins:400,700&display=swap" rel="stylesheet">
8
+ <title>Custom LLM</title>
9
+ <style>
10
+ * {
11
+ box-sizing: border-box;
12
+ margin: 0;
13
+ padding: 0;
14
+ }
15
+
16
+ body {
17
+ font-family: 'Poppins', sans-serif;
18
+ background-color: #f8f9fa;
19
+ color: #212529;
20
+ display: flex;
21
+ flex-direction: column;
22
+ align-items: center;
23
+ justify-content: center;
24
+ min-height: 100vh;
25
+ padding: 1rem;
26
+ }
27
+
28
+ h1 {
29
+ text-align: center;
30
+ position: relative;
31
+ display: inline-block;
32
+ }
33
+
34
+ h1 span {
35
+ font-size: 0.8rem;
36
+ /* Gray color */
37
+ font-weight: 400;
38
+ position: absolute;
39
+ top: -1rem;
40
+ right: 0;
41
+ color: #6c757d;
42
+ }
43
+
44
+ form {
45
+ display: flex;
46
+ flex-direction: column;
47
+ margin-bottom: 2rem;
48
+ }
49
+
50
+ label {
51
+ font-size: 1rem;
52
+ font-weight: 400;
53
+ margin-bottom: 0.5rem;
54
+ }
55
+
56
+ .container {
57
+ max-width: 800px;
58
+ width: 100%;
59
+ margin: 0 auto;
60
+ padding: 1rem;
61
+ }
62
+
63
+ input {
64
+ font-size: 1rem;
65
+ padding: 0.5rem;
66
+ border: 1px solid #ced4da;
67
+ border-radius: 0.25rem;
68
+ margin-bottom: 1rem;
69
+ width: 100%;
70
+ box-sizing: border-box;
71
+ }
72
+
73
+ button {
74
+ font-size: 1rem;
75
+ font-weight: 700;
76
+ color: #fff;
77
+ background-color: #007bff;
78
+ border: none;
79
+ border-radius: 0.25rem;
80
+ padding: 0.5rem 1rem;
81
+ cursor: pointer;
82
+ transition: background-color 0.2s;
83
+ }
84
+
85
+ button:hover {
86
+ background-color: #0056b3;
87
+ }
88
+
89
+ h2 {
90
+ font-size: 1.5rem;
91
+ font-weight: 700;
92
+ margin-bottom: 0.5rem;
93
+ text-align: center;
94
+ }
95
+
96
+ p {
97
+ font-size: 1rem;
98
+ font-weight: 400;
99
+ line-height: 1.5;
100
+ text-align: center;
101
+ }
102
+
103
+ .social-icons {
104
+ display: flex;
105
+ justify-content: center;
106
+ margin-bottom: 1rem;
107
+ }
108
+
109
+ .social-icons a {
110
+ margin: 0 0.5rem;
111
+ }
112
+
113
+ .social-icons svg {
114
+ transition: opacity 0.3s;
115
+ }
116
+
117
+ .social-icons svg:hover {
118
+ opacity: 0.7;
119
+ }
120
+ /* SPINNER */
121
+ .spinner {
122
+ display: none;
123
+ position: fixed;
124
+ top: 0;
125
+ left: 0;
126
+ width: 100%;
127
+ height: 100%;
128
+ background-color: rgba(255, 255, 255, 0.8);
129
+ z-index: 9999;
130
+ justify-content: center;
131
+ align-items: center;
132
+ }
133
+
134
+ .loader {
135
+ border: 5px solid #f3f3f3;
136
+ border-radius: 50%;
137
+ border-top: 5px solid #3498db;
138
+ width: 50px;
139
+ height: 50px;
140
+ animation: spin 2s linear infinite;
141
+ }
142
+
143
+ #spinner-text {
144
+ margin-top: 1rem;
145
+ font-size: 1.5rem;
146
+ font-weight: 400;
147
+ text-align: center;
148
+ }
149
+
150
+ @keyframes spin {
151
+ 0% {
152
+ transform: rotate(0deg);
153
+ }
154
+ 100% {
155
+ transform: rotate(360deg);
156
+ }
157
+ }
158
+
159
+ </style>
160
+ </head>
161
+
162
+ <body>
163
+ <!--<div class="social-icons">
164
+ <a href="https://www.linkedin.com/in/martin-karlsson/" target="_blank">
165
+ <svg width="40px" height="40px" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
166
+ <g id="SVGRepo_bgCarrier" stroke-width="0"></g>
167
+ <g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g>
168
+ <g id="SVGRepo_iconCarrier">
169
+ <rect x="2" y="2" width="28" height="28" rx="14" fill="#1275B1"></rect>
170
+ <path
171
+ d="M12.6186 9.69215C12.6186 10.6267 11.8085 11.3843 10.8093 11.3843C9.81004 11.3843 9 10.6267 9 9.69215C9 8.7576 9.81004 8 10.8093 8C11.8085 8 12.6186 8.7576 12.6186 9.69215Z"
172
+ fill="white"></path>
173
+ <path d="M9.24742 12.6281H12.3402V22H9.24742V12.6281Z" fill="white"></path>
174
+ <path
175
+ d="M17.3196 12.6281H14.2268V22H17.3196C17.3196 22 17.3196 19.0496 17.3196 17.2049C17.3196 16.0976 17.6977 14.9855 19.2062 14.9855C20.911 14.9855 20.9008 16.4345 20.8928 17.5571C20.8824 19.0244 20.9072 20.5219 20.9072 22H24V17.0537C23.9738 13.8954 23.1508 12.4401 20.4433 12.4401C18.8354 12.4401 17.8387 13.1701 17.3196 13.8305V12.6281Z"
176
+ fill="white"></path>
177
+ </g>
178
+ </svg>
179
+ </a>
180
+
181
+ <a href="https://medium.com/@martinkarlsson.io" target="_blank">
182
+ <svg fill="#000000" width="40px" height="40px" viewBox="0 0 256 256" id="Flat" xmlns="http://www.w3.org/2000/svg">
183
+ <g id="SVGRepo_bgCarrier" stroke-width="0"></g>
184
+ <g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g>
185
+ <g id="SVGRepo_iconCarrier">
186
+ <path
187
+ d="M136,128c0,37.49512-28.71,68-64,68S8,165.49514,8,128,36.71,60,72,60,136,90.5049,136,128ZM240,64a8.00039,8.00039,0,0,0-8,8V184a8,8,0,0,0,16,0V72A8.00039,8.00039,0,0,0,240,64Zm-56,0c-5.68262,0-16.39941,2.76074-24.32373,21.251C154.72607,96.8008,152,111.98342,152,128s2.72607,31.19922,7.67627,42.749C167.60059,189.23928,178.31738,192,184,192s16.39941-2.76074,24.32373-21.251C213.27393,159.19924,216,144.01662,216,128s-2.72607-31.19922-7.67627-42.749C200.39941,66.76076,189.68262,64,184,64Z">
188
+ </path>
189
+ </g>
190
+ </svg>
191
+ </a>
192
+ <a href="https://github.com/martinkarlssonio" target="_blank">
193
+ <svg width="40px" height="40px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg"
194
+ xmlns:xlink="http://www.w3.org/1999/xlink" fill="#000000">
195
+ <g id="SVGRepo_bgCarrier" stroke-width="0"></g>
196
+ <g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g>
197
+ <g id="SVGRepo_iconCarrier">
198
+ <title>github [#142]</title>
199
+ <desc>Created with Sketch.</desc>
200
+ <defs> </defs>
201
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
202
+ <g id="Dribbble-Light-Preview" transform="translate(-140.000000, -7559.000000)" fill="#000000">
203
+ <g id="icons" transform="translate(56.000000, 160.000000)">
204
+ <path
205
+ d="M94,7399 C99.523,7399 104,7403.59 104,7409.253 C104,7413.782 101.138,7417.624 97.167,7418.981 C96.66,7419.082 96.48,7418.762 96.48,7418.489 C96.48,7418.151 96.492,7417.047 96.492,7415.675 C96.492,7414.719 96.172,7414.095 95.813,7413.777 C98.04,7413.523 100.38,7412.656 100.38,7408.718 C100.38,7407.598 99.992,7406.684 99.35,7405.966 C99.454,7405.707 99.797,7404.664 99.252,7403.252 C99.252,7403.252 98.414,7402.977 96.505,7404.303 C95.706,7404.076 94.85,7403.962 94,7403.958 C93.15,7403.962 92.295,7404.076 91.497,7404.303 C89.586,7402.977 88.746,7403.252 88.746,7403.252 C88.203,7404.664 88.546,7405.707 88.649,7405.966 C88.01,7406.684 87.619,7407.598 87.619,7408.718 C87.619,7412.646 89.954,7413.526 92.175,7413.785 C91.889,7414.041 91.63,7414.493 91.54,7415.156 C90.97,7415.418 89.522,7415.871 88.63,7414.304 C88.63,7414.304 88.101,7413.319 87.097,7413.247 C87.097,7413.247 86.122,7413.234 87.029,7413.87 C87.029,7413.87 87.684,7414.185 88.139,7415.37 C88.139,7415.37 88.726,7417.2 91.508,7416.58 C91.513,7417.437 91.522,7418.245 91.522,7418.489 C91.522,7418.76 91.338,7419.077 90.839,7418.982 C86.865,7417.627 84,7413.783 84,7409.253 C84,7403.59 88.478,7399 94,7399"
206
+ id="github-[#142]"> </path>
207
+ </g>
208
+ </g>
209
+ </g>
210
+ </g>
211
+ </svg>
212
+ </a>
213
+ <a href="https://www.buymeacoffee.com/martinkarlsson" target="_blank">
214
+ <svg fill="#000000" width="40px" height="40px" viewBox="0 0 24 24" role="img" xmlns="http://www.w3.org/2000/svg">
215
+ <g id="SVGRepo_bgCarrier" stroke-width="0"></g>
216
+ <g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g>
217
+ <g id="SVGRepo_iconCarrier">
218
+ <path
219
+ d="m20.216 6.415-.132-.666c-.119-.598-.388-1.163-1.001-1.379-.197-.069-.42-.098-.57-.241-.152-.143-.196-.366-.231-.572-.065-.378-.125-.756-.192-1.133-.057-.325-.102-.69-.25-.987-.195-.4-.597-.634-.996-.788a5.723 5.723 0 0 0-.626-.194c-1-.263-2.05-.36-3.077-.416a25.834 25.834 0 0 0-3.7.062c-.915.083-1.88.184-2.75.5-.318.116-.646.256-.888.501-.297.302-.393.77-.177 1.146.154.267.415.456.692.58.36.162.737.284 1.123.366 1.075.238 2.189.331 3.287.37 1.218.05 2.437.01 3.65-.118.299-.033.598-.073.896-.119.352-.054.578-.513.474-.834-.124-.383-.457-.531-.834-.473-.466.074-.96.108-1.382.146-1.177.08-2.358.082-3.536.006a22.228 22.228 0 0 1-1.157-.107c-.086-.01-.18-.025-.258-.036-.243-.036-.484-.08-.724-.13-.111-.027-.111-.185 0-.212h.005c.277-.06.557-.108.838-.147h.002c.131-.009.263-.032.394-.048a25.076 25.076 0 0 1 3.426-.12c.674.019 1.347.067 2.017.144l.228.031c.267.04.533.088.798.145.392.085.895.113 1.07.542.055.137.08.288.111.431l.319 1.484a.237.237 0 0 1-.199.284h-.003c-.037.006-.075.01-.112.015a36.704 36.704 0 0 1-4.743.295 37.059 37.059 0 0 1-4.699-.304c-.14-.017-.293-.042-.417-.06-.326-.048-.649-.108-.973-.161-.393-.065-.768-.032-1.123.161-.29.16-.527.404-.675.701-.154.316-.199.66-.267 1-.069.34-.176.707-.135 1.056.087.753.613 1.365 1.37 1.502a39.69 39.69 0 0 0 11.343.376.483.483 0 0 1 .535.53l-.071.697-1.018 9.907c-.041.41-.047.832-.125 1.237-.122.637-.553 1.028-1.182 1.171-.577.131-1.165.2-1.756.205-.656.004-1.31-.025-1.966-.022-.699.004-1.556-.06-2.095-.58-.475-.458-.54-1.174-.605-1.793l-.731-7.013-.322-3.094c-.037-.351-.286-.695-.678-.678-.336.015-.718.3-.678.679l.228 2.185.949 9.112c.147 1.344 1.174 2.068 2.446 2.272.742.12 1.503.144 2.257.156.966.016 1.942.053 2.892-.122 1.408-.258 2.465-1.198 2.616-2.657.34-3.332.683-6.663 1.024-9.995l.215-2.087a.484.484 0 0 1 .39-.426c.402-.078.787-.212 1.074-.518.455-.488.546-1.124.385-1.766zm-1.478.772c-.145.137-.363.201-.578.233-2.416.359-4.866.54-7.308.46-1.748-.06-3.477-.254-5.207-.498-.17-.024-.353-.055-.47-.18-.22-.236-.111-.71-.054-.995.052-.26.152-.609.463-.646.484-.057 1.046.148 1.526.22.577.088 1.156.159 1.737.212 2.48.226 5.002.19 7.472-.14.45-.06.899-.13 1.345-.21.399-.072.84-.206 1.08.206.166.281.188.657.162.974a.544.544 0 0 1-.169.364zm-6.159 3.9c-.862.37-1.84.788-3.109.788a5.884 5.884 0 0 1-1.569-.217l.877 9.004c.065.78.717 1.38 1.5 1.38 0 0 1.243.065 1.658.065.447 0 1.786-.065 1.786-.065.783 0 1.434-.6 1.499-1.38l.94-9.95a3.996 3.996 0 0 0-1.322-.238c-.826 0-1.491.284-2.26.613z">
220
+ </path>
221
+ </g>
222
+ </svg>
223
+ </a>
224
+ </div>
225
+ <h1>
226
+ Customized LLM
227
+ <span>By : Martin Karlsson</span><br>
228
+ </h1> <br> -->
229
+
230
+ <!-- SPINNER -->
231
+ <div id="spinner" class="spinner">
232
+ <div class="loader"></div>
233
+ </div>
234
+
235
+ <div class="container">
236
+ <!--<span>Loads a directory with various documentation for two different fictional technical products (the robots named 'Oksi' and 'Raska') by a
237
+ fictional company.<br> This LLM can anwser your questions about these products, based on the loaded
238
+ documentation.</span><br><br> -->
239
+ <form method="post">
240
+ {% if not show_question_input %}
241
+ <label for="openApiKey">OpenAI API Key:</label>
242
+ <input type="password" id="openApiKey" name="openApiKey" required autocomplete="off">
243
+ <!-- <button type="submit">Submit Key</button> -->
244
+ <button id="submit-btn">Submit Key</button>
245
+ {% else %}
246
+ <br>
247
+ <label for="query">What is your question?</label>
248
+ <input type="text" id="query" name="query" required autocomplete="off">
249
+ <!-- <button type="submit">Ask question!</button> -->
250
+ <button id="submit-btn">Ask question!</button>
251
+ {% endif %}
252
+ </form>
253
+ {% if error_message %}
254
+ <p>{{ error_message }}</p>
255
+ {% endif %}
256
+ <p>{{ output }}</p>
257
+ </div>
258
+
259
+ <!-- SPINNER -->
260
+ <script>
261
+ document.getElementById("submit-btn").addEventListener("click", function() {
262
+ const spinner = document.getElementById("spinner");
263
+ spinner.style.display = "flex";
264
+ API_CALL_FUNCTION().then(() => {
265
+ spinner.style.display = "none";
266
+ });
267
+ });
268
+ </script>
269
+
270
+
271
+ </body>
272
+
273
+ </html>