diff --git a/.github/workflows/deploy-lambda.yml b/.github/workflows/deploy-lambda.yml new file mode 100644 index 0000000..8e7262b --- /dev/null +++ b/.github/workflows/deploy-lambda.yml @@ -0,0 +1,151 @@ +name: Deploy Lambda Function + +on: + pull_request: + types: [closed] + branches: [main] + paths: + - 'data-engineering/src/saayam-org-*/**' + + workflow_dispatch: + inputs: + source_folder: + description: 'Source folder under data-engineering/src/' + required: true + type: string + lambda_function_name: + description: 'AWS Lambda function name' + required: true + type: string + +concurrency: + group: deploy-lambda-${{ github.ref }} + cancel-in-progress: true + +jobs: + detect-changes: + if: github.event_name == 'pull_request' && github.event.pull_request.merged == true + runs-on: ubuntu-latest + outputs: + lambdas: ${{ steps.find-lambdas.outputs.lambdas }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Find changed Lambda folders + id: find-lambdas + run: | + CHANGED=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} \ + | grep '^data-engineering/src/saayam-org-' \ + | cut -d'/' -f3 \ + | sort -u) + + if [ -z "$CHANGED" ]; then + echo "lambdas=[]" >> $GITHUB_OUTPUT + else + JSON=$(echo "$CHANGED" | jq -R -s -c 'split("\n") | map(select(length > 0))') + echo "lambdas=$JSON" >> $GITHUB_OUTPUT + echo "๐Ÿ“‹ Lambdas to deploy: $JSON" + fi + + deploy-auto: + needs: detect-changes + if: needs.detect-changes.outputs.lambdas != '[]' + runs-on: ubuntu-latest + strategy: + matrix: + lambda: ${{ fromJson(needs.detect-changes.outputs.lambdas) }} + steps: + - name: Check if authorized + run: | + if [ "${{ github.actor }}" != "saquibb8" ]; then + echo "โŒ Unauthorized. Only saquibb8 can deploy." + exit 1 + fi + + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: '3.10' + + - name: Build deployment package + run: | + mkdir package + if [ -f data-engineering/src/${{ matrix.lambda }}/requirements.txt ]; then + pip install -r data-engineering/src/${{ matrix.lambda }}/requirements.txt -t package/ --quiet + fi + cp -r data-engineering/src/${{ matrix.lambda }}/* package/ + [ -d data-engineering/src/utils ] && cp -r data-engineering/src/utils package/ + [ -d data-engineering/src/models ] && cp -r data-engineering/src/models package/ + + - name: Create zip + run: | + cd package && zip -r ../deployment.zip . --quiet && cd .. + echo "๐Ÿ“ฆ Size: $(du -h deployment.zip | cut -f1)" + + - uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: ${{ secrets.AWS_REGION }} + + - name: Deploy to Lambda + run: | + echo "๐Ÿš€ Deploying: ${{ matrix.lambda }}" + aws lambda update-function-code \ + --function-name "${{ matrix.lambda }}" \ + --zip-file fileb://deployment.zip \ + --publish --output table + echo "โœ… Done!" + + deploy-manual: + if: github.event_name == 'workflow_dispatch' + runs-on: ubuntu-latest + steps: + - name: Check if authorized + run: | + if [ "${{ github.actor }}" != "saquibb8" ]; then + echo "โŒ Unauthorized." + exit 1 + fi + + - uses: actions/checkout@v4 + with: + ref: main + + - uses: actions/setup-python@v5 + with: + python-version: '3.10' + + - name: Build deployment package + run: | + mkdir package + if [ -f data-engineering/src/${{ inputs.source_folder }}/requirements.txt ]; then + pip install -r data-engineering/src/${{ inputs.source_folder }}/requirements.txt -t package/ --quiet + fi + cp -r data-engineering/src/${{ inputs.source_folder }}/* package/ + [ -d data-engineering/src/utils ] && cp -r data-engineering/src/utils package/ + [ -d data-engineering/src/models ] && cp -r data-engineering/src/models package/ + + - name: Create zip + run: | + cd package && zip -r ../deployment.zip . --quiet && cd .. + echo "๐Ÿ“ฆ Size: $(du -h deployment.zip | cut -f1)" + + - uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: ${{ secrets.AWS_REGION }} + + - name: Deploy to Lambda + run: | + echo "๐Ÿš€ Deploying: ${{ inputs.lambda_function_name }}" + aws lambda update-function-code \ + --function-name "${{ inputs.lambda_function_name }}" \ + --zip-file fileb://deployment.zip \ + --publish --output table + echo "โœ… Done!" + diff --git a/LICENSE b/LICENSE deleted file mode 100644 index f288702..0000000 --- a/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/README.md b/README.md index 116c06e..ad0092e 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,154 @@ -# ml -ML based micro service that uses historical data stored on AWS S3 and real time data to come up with real time responses. +# Saayam For All โ€” Data Engineering Team + +> **โš ๏ธ Read this before you do anything else.** No exceptions. + +--- + +## What is Saayam For All? + +Saayam For All is a **501(c)(3) nonprofit** building an "Uber for Help" platform โ€” a web and mobile app that connects people in need with volunteers and organizations who can help with food, shelter, healthcare, education, and more. + +- **Test App (latest features):** [test-saayam.netlify.app](https://test-saayam.netlify.app/) +- **Production App:** [saayam.netlify.app](https://saayam.netlify.app/) +- **GitHub:** [github.com/saayam-for-all](https://github.com/saayam-for-all/) + +> ๐Ÿ’ก **First thing you should do:** Go to [test-saayam.netlify.app](https://test-saayam.netlify.app/), create an account, submit a test help request, and explore the categories. Understand the product before you touch any code. + +--- + +## Team Structure + +The **Data** group at Saayam consists of two sub-teams that share one WhatsApp group and one GitHub repo ([data](https://github.com/saayam-for-all/data)): + +| Sub-Team | Focus | Leads | +|----------|-------|-------| +| **Data Engineering** | Data pipelines, scraping, Lambda functions, data processing | **Saquib Baig** ยท **Sana Desai** | +| **Data Analytics** | Dashboards, analytics, insights, reporting | **Prachi Deshpande** ยท **Vighnesh Sridhar** | +| **Project Management** | Task planning, coordination, timelines | **Janhavi Chavan** ยท **Ruthwik Dhaipulle** | + +--- + +## Meetings & Communication + +### Weekly Team Meeting (REQUIRED โ€” #1 Priority) + +| | | +|---|---| +| **When** | Every **Tuesday** โ€” **1:00 PM PST**| +| **Who** | Both Data Engineering and Data Analytics | +| **Where** | Zoom link (**https://us04web.zoom.us/j/77345571053?pwd=0EfORCsIzoxdeP3Pio3Cvo6q8p5k9T.1**) | + +This is the most important meeting. This is where you give updates, ask questions, get unblocked, and sync with the team. **Save your questions for this meeting** โ€” mid-week, people get busy and responses take time. + +**If you miss 4 team meetings in a row, you will be removed from the group.** + +### Daily Scrum (Org-Wide) + +| | | +|---|---| +| **When** | Every weekday at **10:00 AM PST** | +| **Who** | All Saayam tech volunteers | +| **Led by** | **Rao Bhethanabotla** | +|**Where** |**Zoom link** (**https://us05web.zoom.us/j/84510208580?pwd=Fay4wfByjXNiDyBbKyEaL5JYrPXyKI.1#success**) | + +This is an org-wide standup. Useful for getting context on what other teams are doing and for getting help from Rao directly. **Mandatory if you have an offer letter.** If you cannot attend, send your status to the WhatsApp group. + +### WhatsApp + +One shared WhatsApp group for both Data Engineering and Data Analytics. This is the primary communication channel. Introduce yourself when you join: name, qualifications, school, location, interests. + +**Communication etiquette:** Our volunteers are across time zones and countries. Never call someone directly without checking availability via WhatsApp first. + +**Escalation chain:** Team WhatsApp group โ†’ Software WhatsApp group (if no response in 24 hrs) โ†’ Rao Bhethanabotla (408-390-1725). + +--- + +## What the Data Engineering Team Does + +We build the **data pipeline** that powers Saayam's intelligent features โ€” scraping, cleaning, aggregating, and serving data so the AI team and frontend can use it. + +For current tasks and roadmap, see **[TASK_TRACKER.md](data-engineering/TASK_TRACKER.md)**. + +For how to work in this codebase (setup, repo structure, code standards, where to put files), see **[CONTRIBUTING.md](data-engineering/CONTRIBUTING.md)**. + +For deep technical context, architecture, and leadership handoff info, see **[KNOWLEDGE_TRANSFER.md](data-engineering/KNOWLEDGE_TRANSFER.md)**. + +--- + +## Getting Started + +### 1. Get Access + +- Fill out the **[Access Hub Form](https://forms.gle/Mg8J3fSvA7AAHVxq5)** to get added to GitHub and WhatsApp. +- Make sure your GitHub profile has your **real name and profile picture** โ€” required for task assignments. +- The Repository name of Data Engineering/Analytics group is **"Data"** + +### 2. Set Up the Repo + +Follow the setup instructions in **[CONTRIBUTING.md](data-engineering/CONTRIBUTING.md)**. + +### 3. Explore the Product + +Go to [test-saayam.netlify.app](https://test-saayam.netlify.app/). Submit a help request. Understand the categories. + +### 4. Complete the Beginner Task + +There is a **beginner task** you must complete before being assigned real work. Check the issues tab for the issue labeled `good first issue` or ask in the team WhatsApp group for the current beginner task. + +### 5. Attend the Tuesday Team Meeting + +Show up, introduce yourself, and you'll be guided from there. + +--- + +## Expectations + +### Accountability + + Here are the rules: + +- **If you are assigned a task and have no updates, no heads up, and no valid reason โ€” you will be removed from the task.** +- **If you miss 4 weekly team meetings in a row โ€” you will be removed from the group.** +- If life gets in the way, just tell us. Communication is everything. Nobody will be upset if you need time off โ€” what causes problems is silence. + +### Timesheets + +Log your hours weekly in the **Google Sheet** shared in the WhatsApp Organization group every Monday: +- Your name, hours worked, team name, GitHub issue URL, brief task description. +- The group name under Timesheet for Data Engineering/Analytics is **"Predictive ML"** +- **Deadline:** Tuesday EOD. Window closes **Wednesday 12:00 AM EST**. No late submissions. + +### Pair Programming + +Most tasks are assigned to 2+ people. Coordinate with your pair. If you need to step away, tell your pair and your team lead. + +--- + +## Key Contacts + +| Role | Who | Reach Via | +|------|-----|-----------| +| **Data Engineering Leads** | **Saquib Baig** ยท **Sana Desai** | Team WhatsApp group | +| **Data Analytics Leads** | **Prachi Deshpande** ยท **Vighnesh Sridhar** | Team WhatsApp group | +| **Project Managers** | **Janhavi Chavan** ยท **Ruthwik Dhaipulle** | Team WhatsApp group | +| **Org Lead / Scrum** | **Rao Bhethanabotla** | (408) 390-1725 โ€” escalation only | +| **Offer Letters** | **Sri Tejaswi Vadapalli** / **Sharanya Gowda** | WhatsApp | +| **Access Issues** | [Access Hub Form](https://forms.gle/Mg8J3fSvA7AAHVxq5) | Google Form | + +--- + +## Useful Links + +| Resource | Link | +|----------|------| +| Test App | [test-saayam.netlify.app](https://test-saayam.netlify.app/) | +| Production App | [saayam.netlify.app](https://saayam.netlify.app/) | +| Data Repo Issues | [github.com/saayam-for-all/data/issues](https://github.com/saayam-for-all/data/issues) | +| Onboarding Wiki | [New Volunteer Onboarding](https://github.com/saayam-for-all/docs/wiki/New-Volunteer-Onboarding) | +| Access Hub Form | [Google Form](https://forms.gle/Mg8J3fSvA7AAHVxq5) | +| Architecture Wiki | [Architecture](https://github.com/saayam-for-all/docs/wiki/Architecture) | +| Saayam YouTube | [youtube.com/@SaayamForAll1](https://www.youtube.com/@SaayamForAll1) | + +--- + +*Last updated: February 2026* diff --git a/data-analytics/README.md b/data-analytics/README.md new file mode 100644 index 0000000..8e82119 --- /dev/null +++ b/data-analytics/README.md @@ -0,0 +1,6 @@ +# Data Analytics + +This space is reserved for the Data Analytics team. + +Use this folder for notebooks, SQL queries, dashboards, and visualizations +that are not embedded directly in the application codebase. diff --git a/data-analytics/dashboards/.gitkeep b/data-analytics/dashboards/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/data-analytics/docs/.gitkeep b/data-analytics/docs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/data-analytics/lambda_functions/application_analytics_request.py.py b/data-analytics/lambda_functions/application_analytics_request.py.py new file mode 100644 index 0000000..3c85238 --- /dev/null +++ b/data-analytics/lambda_functions/application_analytics_request.py.py @@ -0,0 +1,143 @@ +import os +import json +import psycopg2 +import pandas as pd +from datetime import date, datetime + + +def json_serializer(obj): + if isinstance(obj, (datetime, date)): + return obj.isoformat() + return str(obj) + + +def lambda_handler(event, context): + + DB_CONFIG = { + "host": os.environ["host"], + "port": os.environ["port"], + "dbname": os.environ["dbname"], + "user": os.environ["user"], + "password": os.environ["password"], + } + + REAL_TABLE_VOLUNTEERS = "virginia_dev_saayam_rdbms.volunteers_assigned" + REAL_TABLE_USERS = "virginia_dev_saayam_rdbms.users" + REAL_TABLE_COUNTRY = "virginia_dev_saayam_rdbms.country" + + # UPDATE THIS IF NEEDED + DATE_COLUMN = "created_date" # or assigned_date + + conn = None + + try: + conn = psycopg2.connect(**DB_CONFIG) + cursor = conn.cursor() + + # --------------------------------------------------- + # 1. Volunteer Activity Trend + # --------------------------------------------------- + def get_volunteer_trend(interval, group_by="month"): + query = f""" + SELECT volunteer_id, {DATE_COLUMN} + FROM {REAL_TABLE_VOLUNTEERS} + WHERE {DATE_COLUMN} > CURRENT_TIMESTAMP - INTERVAL %s + AND {DATE_COLUMN} IS NOT NULL + """ + cursor.execute(query, (interval,)) + rows = cursor.fetchall() + + if not rows: + return [] + + df = pd.DataFrame(rows, columns=["volunteer_id", "date"]) + df["date"] = pd.to_datetime(df["date"]) + + if df.empty: + return [] + + # New volunteers per period + if group_by == "month": + df_grouped = ( + df.groupby(df["date"].dt.to_period("M")) + .agg({"volunteer_id": "nunique"}) + .reset_index() + ) + df_grouped["Date"] = df_grouped["date"].apply( + lambda x: x.to_timestamp().isoformat() + ) + + else: + df_grouped = ( + df.groupby(df["date"].dt.date) + .agg({"volunteer_id": "nunique"}) + .reset_index() + ) + df_grouped["Date"] = df_grouped["date"].apply( + lambda x: pd.Timestamp(x).isoformat() + ) + + df_grouped.rename(columns={"volunteer_id": "New"}, inplace=True) + + # Total volunteers (cumulative) + df_grouped["Total"] = df_grouped["New"].cumsum() + + # Active volunteers (approx: same as new here โ€” can improve later) + df_grouped["Active"] = df_grouped["New"] + + return df_grouped[["Date", "New", "Active", "Total"]].to_dict("records") + + # --------------------------------------------------- + # 2. Volunteers by Location + # --------------------------------------------------- + def get_volunteers_by_country(): + query = f""" + SELECT DISTINCT v.volunteer_id, c.country_name + FROM {REAL_TABLE_VOLUNTEERS} v + INNER JOIN {REAL_TABLE_USERS} u + ON v.volunteer_id = u.user_id + INNER JOIN {REAL_TABLE_COUNTRY} c + ON u.country_id = c.country_id + WHERE c.country_name IS NOT NULL + """ + cursor.execute(query) + rows = cursor.fetchall() + + if not rows: + return [] + + df = pd.DataFrame(rows, columns=["volunteer_id", "country"]) + df_grouped = df.groupby("country").size().reset_index(name="Count") + + return df_grouped.to_dict("records") + + # --------------------------------------------------- + # Response + # --------------------------------------------------- + response_body = { + "volunteer_activity_trend": get_volunteer_trend("1 year", "month"), + "volunteers_by_location": get_volunteers_by_country(), + + # Optional KPIs (static for now โ€” can improve later) + "kpis": { + "churn_rate": "~5-8%", + "inactive_volunteers": 50, + "retention_rate": "~90%" + } + } + + return { + "statusCode": 200, + "body": json.dumps(response_body, default=json_serializer) + } + + except Exception as e: + print(f"Volunteer analytics failed: {str(e)}") + return { + "statusCode": 500, + "body": json.dumps({"error": "Volunteer analytics failed"}) + } + + finally: + if conn: + conn.close() diff --git a/data-analytics/lambda_functions/beneficiariesTrendAnalysis.py b/data-analytics/lambda_functions/beneficiariesTrendAnalysis.py new file mode 100644 index 0000000..4aaa2fb --- /dev/null +++ b/data-analytics/lambda_functions/beneficiariesTrendAnalysis.py @@ -0,0 +1,241 @@ +import json +import psycopg2 +import pandas as pd +from datetime import datetime +import io + +def lambda_handler(event, context): + # Configuration + DB_CONFIG = { + "host": os.environ['host'], + "port": os.environ['port'], + "dbname": os.environ['dbname'], + "user": os.environ['user'], + "password": os.environ['password'] + } + try: + # Connects to database + conn = psycopg2.connect(**DB_CONFIG) + print ("Successfully connected to the databases") + + except Exception as e: + # Catches an error if connection fails + return { + 'status_code': 500, + 'body': json.dumps({'error': 'Could not connect to database'}) + } + conn.autocommit = False + cursor = conn.cursor() + + REAL_TABLE_REQUEST = "virginia_dev_saayam_rdbms.request" + REAL_TABLE_USERS = "virginia_dev_saayam_rdbms.users" + REAL_TABLE_COUNTRY = "virginia_dev_saayam_rdbms.country" + + + ############################################################################################### + ############################################################################################### + ############################################################################################### + + + def aggregate_beneficiaries(interval): + try: + # Queries the request table for dates within an interval length of time before the present. + query = f""" + SELECT DISTINCT req_user_id, last_update_date + FROM {REAL_TABLE_REQUEST} + WHERE last_update_date > CURRENT_TIMESTAMP - INTERVAL '{interval}' + """ + cursor.execute(query) + + except Exception as e: + # Returns an empty list if query fails. + return [] + dates = cursor.fetchall() + beneficiary_date = [t[1] for t in dates if len(t) > 1] + + return beneficiary_date + + def get_beneficiaries_dic(interval, group_by="day"): + # Fetch data + beneficiaries_dates = aggregate_beneficiaries(interval) + + # Convert to DataFrame + df = pd.DataFrame(beneficiaries_dates, columns=["last_update_date"]) + df["last_update_date"] = pd.to_datetime(df["last_update_date"]) + + # Group by day or month + if group_by == "day": + df_grouped = ( + df.groupby(df["last_update_date"].dt.date) # group by date + .size() + .reset_index(name="Count") + ) + df_grouped["Date"] = df_grouped["last_update_date"].apply( + lambda x: pd.Timestamp(x).isoformat() + ) + elif group_by == "month": + df_grouped = ( + df.groupby(df["last_update_date"].dt.to_period("M")) + .size() + .reset_index(name="Count") + ) + df_grouped["Date"] = df_grouped["last_update_date"].apply(lambda x: x.to_timestamp().isoformat() + ) + else: + raise ValueError("group_by must be either 'day' or 'month'") + + # Build list of dicts + dic = df_grouped[["Date", "Count"]].to_dict("records") + + return dic + + def aggregate_beneficiaries_country(): + try: + # Queries the database for beneficaries and their country. + query = f""" + SELECT DISTINCT req_user_id, c.country_name + FROM {REAL_TABLE_REQUEST} + INNER JOIN {REAL_TABLE_USERS} as u ON {REAL_TABLE_REQUEST}.req_user_id = u.user_id + INNER JOIN {REAL_TABLE_COUNTRY} as c ON u.country_id = c.country_id + """ + cursor.execute(query) + + except Exception as e: + # Returns a dictionary with a status code of 500 if query fails. + return { + 'status_code': 500, + 'error': 'Could not query the database.', + 'beneficiaries by country': [] + } + rows = cursor.fetchall() + + # Count how many beneficiaries per country + df = pd.DataFrame(rows, columns=["user_id", "country"]) + df_grouped = df.groupby("country").size().reset_index(name="Count") + + # Return as list of dicts + dic = df_grouped.to_dict("records") + + return dic + + ############################################################################################### + ############################################################################################### + ############################################################################################### + + def aggregate_help_requests(interval): + try: + # Queries the database for help requests within an interval length of time before the present. + query = f""" + SELECT submission_date + FROM {REAL_TABLE_REQUEST} + WHERE submission_date > CURRENT_TIMESTAMP - INTERVAL '{interval}' + """ + cursor.execute(query) + + except Exception as e: + # Returns an empty list if query fails. + return [] + dates = cursor.fetchall() + request_date = [t[0] for t in dates if len(t) > 0] + + return request_date + + def get_help_requests_dic(interval, group_by="day"): + # Fetch data + request_dates = aggregate_help_requests(interval) + + # Convert to DataFrame + df = pd.DataFrame(request_dates, columns=["submission_date"]) + df["submission_date"] = pd.to_datetime(df["submission_date"]) + + # Group by day or month + if group_by == "day": + df_grouped = ( + df.groupby(df["submission_date"].dt.date) # group by date + .size() + .reset_index(name="Count") + ) + df_grouped["Date"] = df_grouped["submission_date"].apply( + lambda x: pd.Timestamp(x).isoformat() + ) + elif group_by == "month": + df_grouped = ( + df.groupby(df["submission_date"].dt.to_period("M")) + .size() + .reset_index(name="Count") + ) + df_grouped["Date"] = df_grouped["submission_date"].apply(lambda x: x.to_timestamp().isoformat() + ) + else: + raise ValueError("group_by must be either 'day' or 'month'") + + # Build list of dicts + dic = df_grouped[["Date", "Count"]].to_dict("records") + + return dic + + def aggregate_help_requests_country(): + # Queries for help requests and their country. + try: + query = f""" + SELECT c.country_name + FROM {REAL_TABLE_REQUEST} + INNER JOIN {REAL_TABLE_USERS} as u on {REAL_TABLE_REQUEST}.req_user_id = u.user_id + INNER JOIN {REAL_TABLE_COUNTRY} as c on u.country_id = c.country_id + """ + cursor.execute(query) + + except Exception as e: + # Returns a dictionary with status code 500 if query fails. + return { + 'status_code': 500, + 'error': 'Could not query the database.', + 'requests by country': [] + } + rows = cursor.fetchall() + + # Count how many beneficiaries per country + df = pd.DataFrame(rows, columns=["country"]) + df_grouped = df.groupby("country").size().reset_index(name="Count") + + # Return as list of dicts + dic = df_grouped.to_dict("records") + + return dic + + + # Obtains the dictionaries for beneficiaries categorized by time and country. + beneficiaries_days = get_beneficiaries_dic("7 days", "day") + beneficiaries_month = get_beneficiaries_dic("1 month", "day") + beneficiaries_year = get_beneficiaries_dic("1 year", "month") + beneficiaries_country = aggregate_beneficiaries_country() + + # Obtains the dictionaries for help requests categorized by time and country. + help_requests_days = get_help_requests_dic("7 days", "day") + help_requests_month = get_help_requests_dic("1 month", "day") + help_requests_year = get_help_requests_dic("1 year", "month") + help_requests_country = aggregate_help_requests_country() + + response_body = {"7 days beneficiaries": beneficiaries_days, + "1 month beneficiaries": beneficiaries_month, + "1 year beneficiaries": beneficiaries_year, + "Country beneficiaries": beneficiaries_country, + "7 days help requests": help_requests_days, + "1 month help requests": help_requests_month, + "1 year help requests": help_requests_year, + "Country help requests": help_requests_country} + + if conn: + # Closes the connection + conn.close() + print("Database connection successfully closed") + + # Returns a status code of 200 and a JSON body consisting of beneficaries and requests by time and country. + http_res = { + 'statusCode': 200, + 'body': json.dumps(response_body) + } + return http_res + +if name == "main": + print(lambda_handler("". "")) diff --git a/data-analytics/lambda_functions/volunteer_application_analytics.py b/data-analytics/lambda_functions/volunteer_application_analytics.py new file mode 100644 index 0000000..3c85238 --- /dev/null +++ b/data-analytics/lambda_functions/volunteer_application_analytics.py @@ -0,0 +1,143 @@ +import os +import json +import psycopg2 +import pandas as pd +from datetime import date, datetime + + +def json_serializer(obj): + if isinstance(obj, (datetime, date)): + return obj.isoformat() + return str(obj) + + +def lambda_handler(event, context): + + DB_CONFIG = { + "host": os.environ["host"], + "port": os.environ["port"], + "dbname": os.environ["dbname"], + "user": os.environ["user"], + "password": os.environ["password"], + } + + REAL_TABLE_VOLUNTEERS = "virginia_dev_saayam_rdbms.volunteers_assigned" + REAL_TABLE_USERS = "virginia_dev_saayam_rdbms.users" + REAL_TABLE_COUNTRY = "virginia_dev_saayam_rdbms.country" + + # UPDATE THIS IF NEEDED + DATE_COLUMN = "created_date" # or assigned_date + + conn = None + + try: + conn = psycopg2.connect(**DB_CONFIG) + cursor = conn.cursor() + + # --------------------------------------------------- + # 1. Volunteer Activity Trend + # --------------------------------------------------- + def get_volunteer_trend(interval, group_by="month"): + query = f""" + SELECT volunteer_id, {DATE_COLUMN} + FROM {REAL_TABLE_VOLUNTEERS} + WHERE {DATE_COLUMN} > CURRENT_TIMESTAMP - INTERVAL %s + AND {DATE_COLUMN} IS NOT NULL + """ + cursor.execute(query, (interval,)) + rows = cursor.fetchall() + + if not rows: + return [] + + df = pd.DataFrame(rows, columns=["volunteer_id", "date"]) + df["date"] = pd.to_datetime(df["date"]) + + if df.empty: + return [] + + # New volunteers per period + if group_by == "month": + df_grouped = ( + df.groupby(df["date"].dt.to_period("M")) + .agg({"volunteer_id": "nunique"}) + .reset_index() + ) + df_grouped["Date"] = df_grouped["date"].apply( + lambda x: x.to_timestamp().isoformat() + ) + + else: + df_grouped = ( + df.groupby(df["date"].dt.date) + .agg({"volunteer_id": "nunique"}) + .reset_index() + ) + df_grouped["Date"] = df_grouped["date"].apply( + lambda x: pd.Timestamp(x).isoformat() + ) + + df_grouped.rename(columns={"volunteer_id": "New"}, inplace=True) + + # Total volunteers (cumulative) + df_grouped["Total"] = df_grouped["New"].cumsum() + + # Active volunteers (approx: same as new here โ€” can improve later) + df_grouped["Active"] = df_grouped["New"] + + return df_grouped[["Date", "New", "Active", "Total"]].to_dict("records") + + # --------------------------------------------------- + # 2. Volunteers by Location + # --------------------------------------------------- + def get_volunteers_by_country(): + query = f""" + SELECT DISTINCT v.volunteer_id, c.country_name + FROM {REAL_TABLE_VOLUNTEERS} v + INNER JOIN {REAL_TABLE_USERS} u + ON v.volunteer_id = u.user_id + INNER JOIN {REAL_TABLE_COUNTRY} c + ON u.country_id = c.country_id + WHERE c.country_name IS NOT NULL + """ + cursor.execute(query) + rows = cursor.fetchall() + + if not rows: + return [] + + df = pd.DataFrame(rows, columns=["volunteer_id", "country"]) + df_grouped = df.groupby("country").size().reset_index(name="Count") + + return df_grouped.to_dict("records") + + # --------------------------------------------------- + # Response + # --------------------------------------------------- + response_body = { + "volunteer_activity_trend": get_volunteer_trend("1 year", "month"), + "volunteers_by_location": get_volunteers_by_country(), + + # Optional KPIs (static for now โ€” can improve later) + "kpis": { + "churn_rate": "~5-8%", + "inactive_volunteers": 50, + "retention_rate": "~90%" + } + } + + return { + "statusCode": 200, + "body": json.dumps(response_body, default=json_serializer) + } + + except Exception as e: + print(f"Volunteer analytics failed: {str(e)}") + return { + "statusCode": 500, + "body": json.dumps({"error": "Volunteer analytics failed"}) + } + + finally: + if conn: + conn.close() diff --git a/data-analytics/mock-data-generation/readme.md b/data-analytics/mock-data-generation/readme.md new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/data-analytics/mock-data-generation/readme.md @@ -0,0 +1 @@ + diff --git a/data-analytics/notebooks/.gitkeep b/data-analytics/notebooks/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/data-analytics/sql/.gitkeep b/data-analytics/sql/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/data-analytics/sql/Saayam_Table.column.names_data.xlsx b/data-analytics/sql/Saayam_Table.column.names_data.xlsx new file mode 100644 index 0000000..c9976bc Binary files /dev/null and b/data-analytics/sql/Saayam_Table.column.names_data.xlsx differ diff --git a/data-analytics/sql/my_query.sql b/data-analytics/sql/my_query.sql new file mode 100644 index 0000000..e69de29 diff --git a/data-engineering/.env.example b/data-engineering/.env.example new file mode 100644 index 0000000..85f50a4 --- /dev/null +++ b/data-engineering/.env.example @@ -0,0 +1,6 @@ +DATABASE_URL=postgresql://user:password@localhost:5432/saayam +AWS_REGION=us-east-1 +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +OPENAI_API_KEY= +GEMINI_API_KEY= diff --git a/data-engineering/.gitignore b/data-engineering/.gitignore new file mode 100644 index 0000000..c4990cd --- /dev/null +++ b/data-engineering/.gitignore @@ -0,0 +1,21 @@ +__pycache__/ +*.py[cod] +*$py.class +venv/ +env/ +.venv/ +.env +.vscode/ +.idea/ +*.swp +.DS_Store +Thumbs.db +.ipynb_checkpoints/ +dist/ +build/ +*.egg-info/ +htmlcov/ +.coverage +datasets/raw/ +datasets/cleaned/ +dist/ diff --git a/data-engineering/CONTRIBUTING.md b/data-engineering/CONTRIBUTING.md new file mode 100644 index 0000000..3b51979 --- /dev/null +++ b/data-engineering/CONTRIBUTING.md @@ -0,0 +1,302 @@ +# Contributing to Data Engineering + +> **This is your day-to-day reference for working in this codebase.** Repo structure, setup, code standards, where to put files, and how to submit work โ€” it's all here. + +--- + +## Local Setup + +```bash +git clone -b main https://github.com/saayam-for-all/data.git +cd data +python -m venv venv +source venv/bin/activate # macOS/Linux โ€” or venv\Scripts\activate on Windows +cd data-engineering +pip install -r requirements.txt +cp .env.example .env # Fill in your environment variables +``` + +### Local Development First + +**You will not get AWS Lambda/S3 access.** You develop and test locally with mock data. When your code works, let the team leads know โ€” they handle AWS deployment. Structure your code so AWS calls can be easily mocked. + +--- + +## Tech Stack + +| Tech | Purpose | +|------|---------| +| **Python** | Primary language | +| **AWS Lambda** | Serverless functions (team leads deploy โ€” you don't get access) | +| **AWS S3** | Data lake storage | +| **PostgreSQL (Aurora)** | Primary database | +| **boto3** | AWS SDK for Python | +| **SQLAlchemy** | ORM for database interactions | +| **pandas** | Data cleaning and manipulation | +| **Docker** | Containerization | + +--- + +## Repository Structure + +``` +data-engineering/ +โ”œโ”€โ”€ .env.example +โ”œโ”€โ”€ .gitignore +โ”œโ”€โ”€ CONTRIBUTING.md +โ”œโ”€โ”€ KNOWLEDGE_TRANSFER.md +โ”œโ”€โ”€ README.md +โ”œโ”€โ”€ TASK_TRACKER.md +โ”œโ”€โ”€ requirements.txt +โ”‚ +โ”œโ”€โ”€ datasets/ +โ”‚ โ”œโ”€โ”€ cleaned/ +โ”‚ โ””โ”€โ”€ raw/ +โ”‚ +โ”œโ”€โ”€ infrastructure/ +โ”‚ โ”œโ”€โ”€ deployment.yaml +โ”‚ โ”œโ”€โ”€ docker-compose.yml +โ”‚ โ”œโ”€โ”€ Dockerfile +โ”‚ โ””โ”€โ”€ service.yaml +โ”‚ +โ”œโ”€โ”€ notebooks/ +โ”‚ โ””โ”€โ”€ analytics_sql_and_visualizations.ipynb +โ”‚ +โ”œโ”€โ”€ scripts/ +โ”‚ โ””โ”€โ”€ deploy/ +โ”‚ โ”œโ”€โ”€ deploy_aggregator.sh +โ”‚ โ””โ”€โ”€ deploy_categorizer.sh +โ”‚ +โ”œโ”€โ”€ src/ +โ”‚ โ”œโ”€โ”€ __init__.py +โ”‚ โ”œโ”€โ”€ app.py +โ”‚ โ”œโ”€โ”€ config.py +โ”‚ โ”œโ”€โ”€ extensions.py +โ”‚ โ”œโ”€โ”€ main.py +โ”‚ โ”‚ +โ”‚ โ”œโ”€โ”€ aggregator/ +โ”‚ โ”‚ โ”œโ”€โ”€ __init__.py +โ”‚ โ”‚ โ”œโ”€โ”€ db_client.py +โ”‚ โ”‚ โ”œโ”€โ”€ genai_client.py +โ”‚ โ”‚ โ”œโ”€โ”€ handler.py +โ”‚ โ”‚ โ”œโ”€โ”€ merger.py +โ”‚ โ”‚ โ””โ”€โ”€ requirements.txt +โ”‚ โ”‚ +โ”‚ โ”œโ”€โ”€ categorizer/ +โ”‚ โ”‚ โ”œโ”€โ”€ __init__.py +โ”‚ โ”‚ โ”œโ”€โ”€ categories.py +โ”‚ โ”‚ โ”œโ”€โ”€ classifier.py +โ”‚ โ”‚ โ”œโ”€โ”€ handler.py +โ”‚ โ”‚ โ””โ”€โ”€ requirements.txt +โ”‚ โ”‚ +โ”‚ โ”œโ”€โ”€ models/ +โ”‚ โ”‚ โ”œโ”€โ”€ __init__.py +โ”‚ โ”‚ โ””โ”€โ”€ fraud_requests.py +โ”‚ โ”‚ +โ”‚ โ”œโ”€โ”€ scrapers/ +โ”‚ โ”‚ โ”œโ”€โ”€ __init__.py +โ”‚ โ”‚ โ”œโ”€โ”€ emergency_contacts/ +โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ __init__.py +โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ cleaner.py +โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ loader.py +โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ scraper.py +โ”‚ โ”‚ โ””โ”€โ”€ ngo/ +โ”‚ โ”‚ โ”œโ”€โ”€ __init__.py +โ”‚ โ”‚ โ”œโ”€โ”€ afghanistan.py +โ”‚ โ”‚ โ”œโ”€โ”€ india.py +โ”‚ โ”‚ โ””โ”€โ”€ malaysia.py +โ”‚ โ”‚ +โ”‚ โ”œโ”€โ”€ translation/ +โ”‚ โ”‚ โ”œโ”€โ”€ __init__.py +โ”‚ โ”‚ โ””โ”€โ”€ lang_detection.py +โ”‚ โ”‚ +โ”‚ โ””โ”€โ”€ utils/ +โ”‚ โ””โ”€โ”€ __init__.py +โ”‚ +โ””โ”€โ”€ tests/ + +data-analytics/ +โ”œโ”€โ”€ README.md +โ””โ”€โ”€ notebooks/ +``` + +--- + +## How to Contribute + +### Task Assignment + +**Do not self-assign tasks.** Do not edit issue descriptions or user stories. Task assignment and issue management are the responsibility of **team leads and project managers**. If you want to work on something, let us know in the team meeting or WhatsApp group and we will assign it to you. + +### Branch Naming + +``` +__ +``` +Example: `saquibb8_100_auto_categorize_requests` + +### Workflow + +1. Get assigned a task by a team lead or PM. +2. Branch off `dev`: `git checkout -b ` +3. Develop and test locally with mock data. +4. Commit with issue references: `git commit -m "#100: Add classification logic"` +5. Push and create a PR targeting `dev` (never `main`). Assign reviewers. +6. Address code review feedback. PRs need **at least 2 reviews**. +7. Team lead merges after approval. + +### What NOT to Do + +- โŒ Don't push directly to `main` or `dev`. +- โŒ Don't self-assign tasks or edit issue descriptions. +- โŒ Don't commit secrets, API keys, or AWS credentials. +- โŒ Don't disappear after being assigned a task. + +--- + +## Code Standards + +- Python 3.10+, PEP 8, type hints where practical. +- `snake_case` for file names and functions, `PascalCase` for class names. +- Docstrings for all functions and classes. +- No credentials in code โ€” use `.env` files. +- Never commit `__pycache__/`, `venv/`, `.env`, or IDE files. +- Update `requirements.txt` if you add dependencies. + +--- + +## Where to Create New Files + +### Adding a New Lambda Function + +All Lambda functions live under `src/`. Create a new folder for your Lambda: + +``` +src/ +โ””โ”€โ”€ your_lambda_name/ + โ”œโ”€โ”€ __init__.py # Required - makes it a Python package + โ”œโ”€โ”€ lambda_function.py # Entry point (must have lambda_handler function) + โ”œโ”€โ”€ helpers.py # Supporting code (optional) + โ””โ”€โ”€ requirements.txt # Lambda-specific dependencies (lightweight only) +``` + +**Steps:** +1. Create folder: `mkdir src/your_lambda_name` +2. Add `__init__.py`: `touch src/your_lambda_name/__init__.py` +3. Create `lambda_function.py` with a `lambda_handler(event, context)` function +4. Add a `requirements.txt` with lightweight dependencies (heavy packages like pandas should be Lambda Layers) +5. Push via PR โ†’ auto-deploys on merge to main + +**Reference:** See [`src/saayam-org-aggregator/`](src/saayam-org-aggregator/) for a complete working example. + +### Adding a New Scraper + +Scrapers go under `src/scrapers/`. Choose the appropriate subfolder: + +| Scraper Type | Location | +|--------------|----------| +| Emergency contacts | `src/scrapers/emergency_contacts/` | +| NGO data | `src/scrapers/ngo/` | +| New category | Create `src/scrapers/your_category/` | + +**Naming convention:** Use lowercase with underscores (e.g., `united_states.py`, not `UnitedStates.py`) + +**Steps for a new scraper:** +1. Add your scraper file: `src/scrapers/ngo/country_name.py` +2. If creating a new category: + ``` + mkdir src/scrapers/your_category + touch src/scrapers/your_category/__init__.py + ``` +3. Output raw data to `datasets/raw/` +4. Output cleaned data to `datasets/cleaned/` + +### Working with Data Files + +**Never commit large data files to git.** The `datasets/` folder is gitignored. + +| Data State | Location | +|------------|----------| +| Raw/unprocessed | `datasets/raw/` | +| Cleaned/processed | `datasets/cleaned/` | + +Use relative paths in your code: +```python +import os + +PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +raw_path = os.path.join(PROJECT_ROOT, 'datasets', 'raw', 'your_file.csv') +``` + +### Adding Database Models + +Database models go in `src/models/`: + +``` +src/models/ +โ”œโ”€โ”€ __init__.py +โ”œโ”€โ”€ fraud_requests.py # Existing model +โ””โ”€โ”€ your_model.py # Add new models here +``` + +### Working with the Database Layer (Future: Vector Store Migration) + +> **Heads up:** We're planning to migrate from PostgreSQL to a vector database (Redis, Pinecone, etc.) for certain use cases. + +**Current database code:** +- Connection helpers: `src/utils/` (add `db_client.py` here) +- ORM models: `src/models/` + +**When adding database code:** +1. **Don't** scatter database connections across files +2. **Do** use `src/utils/db_client.py` for all DB connections +3. **Do** abstract your queries so they can be swapped out later + +**Example pattern:** +```python +# src/utils/db_client.py +class DatabaseClient: + """Abstraction layer for database operations. + + When we migrate to Redis/vector store, we only need to + change this file, not every file that uses the DB. + """ + def __init__(self): + # Currently PostgreSQL + self.conn = get_postgres_connection() + + def search_similar(self, query_vector): + # TODO: Replace with vector store search + pass +``` + +### Shared Utilities + +Reusable helpers (AWS clients, logging, config) go in `src/utils/`: + +``` +src/utils/ +โ”œโ”€โ”€ __init__.py +โ”œโ”€โ”€ db_client.py # Database connections +โ”œโ”€โ”€ aws_client.py # AWS SDK helpers +โ”œโ”€โ”€ genai_client.py # OpenAI/Gemini wrappers +โ””โ”€โ”€ logger.py # Logging setup +``` + +### Quick Reference + +| Task | Create files in | +|------|-----------------| +| New Lambda function | `src/your_lambda/` | +| New scraper (existing category) | `src/scrapers/category/` | +| New scraper category | `src/scrapers/new_category/` | +| Database model | `src/models/` | +| Shared utility | `src/utils/` | +| Jupyter notebook | `notebooks/` | +| Test file | `tests/` | +| Deploy script | `scripts/deploy/` | +| Docker/K8s config | `infrastructure/` | + +--- + +*Last updated: February 2026* diff --git a/data-engineering/KNOWLEDGE_TRANSFER.md b/data-engineering/KNOWLEDGE_TRANSFER.md new file mode 100644 index 0000000..84b347a --- /dev/null +++ b/data-engineering/KNOWLEDGE_TRANSFER.md @@ -0,0 +1,195 @@ +# Knowledge Transfer Document โ€” Data Engineering Team + +> **Purpose:** If the current team leads leave tomorrow, this document should allow the next person to pick up where they left off with zero handholding. +> +> **Audience:** Team leads and senior contributors. For onboarding, see [README.md](README.md). For dev workflow, see [CONTRIBUTING.md](CONTRIBUTING.md). For task status, see [TASK_TRACKER.md](TASK_TRACKER.md). + +--- + +## Architecture & Data Flow + +### Current Pipeline + +``` +External Data (Wikipedia, NGO sites) + โ”‚ Web scraping (Python) + โ–ผ +โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +โ”‚ Saayam DB โ”‚ โ”‚ GenAI Lambda โ”‚ +โ”‚ (PostgreSQL) โ”‚ โ”‚ (More_Org_GenAI โ”‚ +โ”‚ โ”‚ โ”‚ _Py_v3126) โ”‚ +โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ + โ–ผ + saayam-org-aggregator Lambda + (merges sources, deduplicates) + โ”‚ + โ–ผ + API Gateway โ†’ webapp frontend +``` + +### Future Pipeline (Rao's Directive) + +``` +PostgreSQL โ†’ S3 Data Lake โ†’ Vectorize โ†’ Vector DB โ†’ AI Agent +``` + +Not yet built. The team needs to produce a functional spec / design spec for this. + +--- + +## How the Data Repo Connects to Other Repos + +Only **7 of 40+ repos** are actively developed: + +``` +webapp (React) โ†โ”€โ”€ api (API Gateway) โ†โ”€โ”€ mobileapp + โ”‚ โ”‚ + โ–ผ โ–ผ + volunteer request + (Java/Spring) (Help requests) + โ”‚ โ”‚ + โ–ผ โ–ผ + database (PostgreSQL) + โ”‚ + โ–ผ + data (Python) โ† YOU ARE HERE + โ”‚ + โ–ผ + ai (Python/Flask โ€” GenAI) + + devsecops โ€” CI/CD, infra (all teams) +``` + +### Cross-Team Dependencies + +| Team | Repo | How We Interact | +|------|------|----------------| +| **GenAI / AI** | [ai](https://github.com/saayam-for-all/ai) | We invoke their Lambda. Future: we feed vectorized data to their agent. | +| **Frontend** | [webapp](https://github.com/saayam-for-all/webapp) | They consume our Lambda endpoints. #99 is a cross-team task. | +| **Backend / API** | [api](https://github.com/saayam-for-all/api) | They set up API Gateway routes to our Lambdas. | +| **Database** | [database](https://github.com/saayam-for-all/database) | We read from their DB. Coordinate for schema changes. | +| **DevSecOps** | [devsecops](https://github.com/saayam-for-all/devsecops) | They manage AWS infra our Lambdas run on. | +| **Product** | [prod](https://github.com/saayam-for-all/prod) | Defines what we build. [MVP Pages wiki](https://github.com/saayam-for-all/prod/wiki/1.0-MVP-Pages). | + +--- + +## Technical Details of Completed Work + +### Organization Aggregator Lambda (#98) + +Lambda that accepts a help request (subject, description, location, category) and fetches matching orgs from: +1. **Saayam DB** โ€” registered orgs (tagged "verified") +2. **GenAI Lambda** โ€” AI-suggested orgs (tagged "genai") + +Merges, deduplicates (DB takes priority), returns unified list with graceful degradation. + +**Lambda:** `saayam-org-aggregator` (us-east-1) + +**Input:** +```json +{ + "category": "Shelter", + "subject": "Shelter", + "description": "i need a place to stay", + "location": "tampa" +} +``` + +**Output:** +```json +{ + "statusCode": 200, + "body": [ + { + "name": "The Salvation Army Tampa", + "location": "Tampa, FL", + "contact": "(813) 223-1320", + "email": "...", + "web_url": "...", + "mission": "...", + "source": "..." + } + ] +} +``` + +### Emergency Contact Data Pipeline + +Scrapes emergency contact numbers from Wikipedia โ†’ cleans with pandas โ†’ inserts into PostgreSQL via SQLAlchemy. + +**Files:** `src/scrapers/emergency_contacts/` โ€” `scraper.py`, `cleaner.py`, `loader.py`. + +### NGO Web Scrapers + +Country-specific scrapers for nonprofit listings: `src/scrapers/ngo/afghanistan.py`, `india.py`, `malaysia.py`. Run independently, produce CSVs. Not yet in an automated pipeline. + +### Language Detection & Translation + +`src/translation/lang_detection.py` โ€” detects language with `langdetect`, translates to English with `GoogleTranslator`. + +### Fraud Detection Model (Schema Only) + +`src/models/fraud_requests.py` โ€” SQLAlchemy model for fraud requests. Schema defined, no active detection logic built. + +### Earlier Pipeline Work (#55-#67) + +ETL architecture design (#57), Aurora schema for nonprofits (#56), AWS architecture doc (#55), IRS S3 Lambda (#60), Charity Navigator scraper (#62), IRS nonprofit categorization (#67). These informed the current pipeline but IRS data was later dropped (see Decision Log). + +--- + +## AWS Infrastructure + +| Service | Purpose | Access | +|---------|---------|--------| +| **Lambda** | Serverless functions | Team leads only | +| **S3** | Data lake, datasets | Team leads only | +| **Aurora PostgreSQL** | Primary database | Team leads only | +| **API Gateway** | Routes to Lambdas | API/DevSecOps team | + +**Invoking other Lambdas:** +```python +client = boto3.client('lambda', region_name='us-east-1') +response = client.invoke(FunctionName='More_Org_GenAI_Py_v3126', ...) +``` + +--- + +## Decision Log + +| Date | Decision | Rationale | +|------|----------|-----------| +| Feb 2026 | Dropped IRS data from org-aggregator | Too noisy, not useful for matching. Aggregator uses Saayam DB + GenAI only. | +| Feb 2026 | #99 is cross-team (data + webapp) | Lambda done. Frontend work remains โ€” needs React-comfortable volunteer. | +| 2025 | Local-first development | AWS access cannot be given to all volunteers. Cost and security. | +| 2025 | Pair programming mandate | 97% churn means no single person should own a task alone. | +| Apr 2025 | Aurora PostgreSQL as primary DB | PostgreSQL compatible, managed AWS, scalable. | + +--- + +## Known Issues & Technical Debt + +1. **No tests.** No unit tests written yet. +2. **No CI/CD.** No GitHub Actions for automated testing/linting. +3. **Stale issues (#80-90).** Need triage โ€” reassign or close. + +--- + +## Handoff Checklist + +If you are leaving the team lead role: + +- [ ] Update this document and the README with any changes. +- [ ] Brief the incoming lead on active issues (see [TASK_TRACKER.md](TASK_TRACKER.md)). +- [ ] Introduce the new lead in the WhatsApp group. +- [ ] Transfer AWS access (coordinate with Rao and DevSecOps). +- [ ] Share any credentials not in the shared environment. +- [ ] Walk through deployed Lambdas on AWS โ€” what, where, how configured. +- [ ] Review and hand off open PRs. +- [ ] Inform Rao about the transition. +- [ ] Update Key Contacts in the README. +- [ ] Close or reassign stale issues. + +--- + +*Last updated: February 2026 ยท Maintained by: Data Engineering Team Leads* diff --git a/data-engineering/TASK_TRACKER.md b/data-engineering/TASK_TRACKER.md new file mode 100644 index 0000000..6f61699 --- /dev/null +++ b/data-engineering/TASK_TRACKER.md @@ -0,0 +1,92 @@ +# Task Tracker โ€” Data Engineering Team + +> **Maintained by:** Project Managers (Janhavi ยท Ruthwik) +> +> **Update frequency:** Weekly โ€” update statuses and assignments before each Tuesday team meeting. + +--- + +## To-Do + + + +| Issue | Title | Assigned To | Status | Notes | +|-------|-------|-------------|--------|-------| +| [#102](https://github.com/saayam-for-all/data/issues/102) | Read and Review Data Engineering Onboarding Documentation | โ€” | ๐Ÿ”„ Open | Before being assigned any development work, all new Data Engineering volunteers must read and understand the team's documentation. This is your first task. | +| [#78](https://github.com/saayam-for-all/data/issues/78) | Beginner Task: Environment Check + Saayam Practice Dataset Exploration (Local Only) | โ€” | ๐Ÿ”„ Open | Before being assigned any development work, all new Data Engineering volunteers must complete the beginner-friendly local exercise. | + +--- + +## In Progress + + + +| Issue | Title | Assigned To | Status | Notes | +|-------|-------|-------------|--------|-------| +| [#103](https://github.com/saayam-for-all/data/issues/103) | Daily Metrics Aggregation Lambda | Arjun2110exe, Keerthana19-p, Nitish0615, gauri-d, sanobarasna | ๐Ÿ”„ Open | | +| [#104](https://github.com/saayam-for-all/data/issues/104) | Homepage Metrics Display from S3 (Web App Team)| Neharik335, PallaviP31, Srilaxmi1616, Ujwalap910 | ๐Ÿ”„ Open | | +| [#114](https://github.com/saayam-for-all/data/issues/114) | Generate Synthetic CSV Data for "users" and "request" tables from Database Schema| AnushaDusakanti15, Sravy-Kolli, VeeraVSDeekshith, navyasri0820 | ๐Ÿ”„ Open | | +| [#117](https://github.com/saayam-for-all/data/issues/117) | Generate Synthetic CSV Data for "volunteers_assigned"and "volunteer_details" tables from Database Schema| jeevanbanoth, priyankarao89, trikotrsh, vamisaigarapati | ๐Ÿ”„ Open | | +| [#118](https://github.com/saayam-for-all/data/issues/118) | Generate Synthetic CSV Data for "volunteer_applications" and "user_skills" tables from Database Schema| emmax07, harshinianubrolu-12, sagarikapatha, shendu-95 | ๐Ÿ”„ Open | | +| [#119](https://github.com/saayam-for-all/data/issues/119) | Generate Synthetic CSV Data for "request_comments" and "volunteer_rating" tables from Database Schema| Nishu2000-hub, jeminmiyani, rohitsurya7393, sanobarsana | ๐Ÿ”„ Open | | +| [#120](https://github.com/saayam-for-all/data/issues/120) | Generate Synthetic CSV Data for "request_guest_details" and "req_add_info" tables from Database Schema| PoojaryAnusha98, Sindhu782, Slakkimsetty, gkswapna | ๐Ÿ”„ Open | | +| [#121](https://github.com/saayam-for-all/data/issues/121) | Generate Synthetic CSV Data for "fraud_requests" and "notifications" tables from Database Schema| AbhiBadola, Bhvnikirn, Gyashaswi, pulipakav1 | ๐Ÿ”„ Open | | + +> **Note:** Many issues in the #80-90 range are stale โ€” created by volunteers who are no longer active. These need triage (reassign or close). + +--- + +## Completed + + + +| Issue | Title | Completed | Notes | +|-------|-------|-----------|-------| +| [#98](https://github.com/saayam-for-all/data/issues/98) | Aggregate Organization Listings from Multiple Sources | Feb 2026 | Lambda deployed. See [KNOWLEDGE_TRANSFER.md](KNOWLEDGE_TRANSFER.md) for specs. | +| [#57](https://github.com/saayam-for-all/data/issues/57) | ETL Architecture Design | 2025 | Informed current pipeline. | +| [#56](https://github.com/saayam-for-all/data/issues/56) | Aurora Schema for Nonprofits | 2025 | Schema defined. | +| [#55](https://github.com/saayam-for-all/data/issues/55) | AWS Architecture Document | 2025 | Informed current pipeline. | +| [#62](https://github.com/saayam-for-all/data/issues/62) | Charity Navigator Scraper | 2025 | Completed. | +| [#60](https://github.com/saayam-for-all/data/issues/60) | IRS S3 Lambda | 2025 | IRS data later dropped. | +| [#67](https://github.com/saayam-for-all/data/issues/67) | IRS Nonprofit Categorization | 2025 | IRS data later dropped. | +| โ€” | Emergency Contact Data Pipeline | 2025 | Wikipedia โ†’ clean โ†’ PostgreSQL. | +| โ€” | NGO Web Scrapers | 2025 | Afghanistan, India, Malaysia. CSVs, not yet automated. | +| โ€” | Language Detection & Translation | 2025 | `langdetect` + `GoogleTranslator`. | +| โ€” | Fraud Detection Model (Schema Only) | 2025 | SQLAlchemy model only, no detection logic. | +| [#99](https://github.com/saayam-for-all/data/issues/99) | Integrate Org Aggregator into Frontend | March 2026 | Cross-team (data + webapp). Lambda is done. Remaining work is React frontend integration. | +[#100](https://github.com/saayam-for-all/data/issues/100) | Auto-Categorize Help Requests Using Lambda | March 2026 | LLM-based classification. | +| [#84](https://github.com/saayam-for-all/data/issues/84) | Super Admin Dashboard Application Analytics design : creation of Test data | March 2026 | +| [#89](https://github.com/saayam-for-all/data/issues/89) | Application Analytics Dashboard implmentation in Python using plotly libaray | March 2026 | +| [#80](https://github.com/saayam-for-all/data/issues/80) | Prepare and Categorize ProPublica Nonprofit Data | March 2026 | +| [#81](https://github.com/saayam-for-all/data/issues/81) | Creation of Super Admin Dashboard Analytics | March 2026 | +| [#82](https://github.com/saayam-for-all/data/issues/82) | Design of Application Analytics tab under Super Admin Dashboard | March 2026 | +| [#83](https://github.com/saayam-for-all/data/issues/83) | Design Infrastructure analytics wiki page under ML repo | March 2026 | +| [#85](https://github.com/saayam-for-all/data/issues/85) | Work on Infrastructure analytics dashboard under Super Admin Dashboard Analytics tab | March 2026 | +| [#87](https://github.com/saayam-for-all/data/issues/87) | Use Sentiment Analysis to detect Depressive or Threatening Language | March 2026 | +| [#88](https://github.com/saayam-for-all/data/issues/88) | Design of Google Analytics tab under Super Admin Dashboard | March 2026 | +| [#96](https://github.com/saayam-for-all/data/issues/96) | Design of Consolidated metrics of application analytics on the Saayam Home Page | March 2026 | + +--- + +## Roadmap + + + +| Priority | Item | Details | Status | +|----------|------|---------|--------| +| 1 | RDBMS โ†’ S3 Data Lake | Periodic data export from Aurora to S3. Needs functional spec. | Not started | +| 2 | Data Vectorization | Generate embeddings from exported data. Tech selection needed. | Not started | +| 3 | Vector DB Setup | Evaluate Pinecone, Weaviate, pgvector, etc. | Not started | +| 4 | Saayam AI Agent | Agent that queries vector DB with Saayam's own data. | Not started | +| 5 | Content Safety | Sentiment analysis (#87), translation for content filtering (#86). | Stale | +| 6 | Analytics Dashboard | Super Admin analytics (#81-89). Data Analytics team scope. | Stale | + +These align with Rao's long-term directive: + +``` +PostgreSQL (RDBMS) โ†’ S3 Data Lake โ†’ Vectorize โ†’ Vector DB โ†’ AI Agent +``` + +--- + +*Last updated: March 2026* diff --git a/data-engineering/datasets/cleaned/cleaned_emergency_numbers.csv b/data-engineering/datasets/cleaned/cleaned_emergency_numbers.csv new file mode 100644 index 0000000..4e178a7 --- /dev/null +++ b/data-engineering/datasets/cleaned/cleaned_emergency_numbers.csv @@ -0,0 +1,100 @@ +Country,Police,Ambulance,Fire,Notes +Angola,113,112/116,115, +Benin,117,112,118, +Burundi,117,112,118, +Botswana,999,997,998,Mobile phones โ€“112. +Burkina Faso,17,112,18, +Cape Verde,132,130,131, +Central African Republic,117,1220,118, +Chad,17,2251-4242,18,Ambulance โ€“2251-1237. +Comoros,17,772-03-73,18,Ambulance โ€“773-26-04. +Republic Of Congo,117,,118, +Democratic Republic Of Congo,112,,118, +Djibouti,17,19,18, +Egypt,112or122,123,180,Tourist police โ€“126; Traffic police โ€“128; Electricity emergency โ€“121; Gas emergency โ€“129; Mobile phones โ€“112. +Equatorial Guinea,114,115,112,Traffic police โ€“116. +Eritrea,113,114,116, +Eswatini,999,977,933, +Gabon,1730,1300,18, +Gambia,117,116,118,Police โ€“112; Electricity emergency โ€“124; Water emergency โ€“125. +Guinea,117,18,442-020,Maritime Emergency Service โ€“19; Gendarmerie โ€“118; National Gendarmerie โ€“122 +Ivory Coast,110or111or170,185,180, +Lesotho,123,121,122, +Madagascar,117,124,118,Traffic police โ€“3600. +Malawi,997,998,999,Police โ€“990. +Mali,17,15,18,"Ambulance โ€“112, Fire โ€“112." +Mauritania,117,101,118,Gendarmerie โ€“116; Traffic police โ€“119. +Mauritius,112,114,115,Police โ€“999; Fire โ€“995. +Mozambique,119,117,198, +Namibia,10 111,depending on town/city,depending on town/city, +Niger,17,15,18, +Rwanda,112,912,112,Traffic police โ€“113. +Senegal,17,18,1515, +Somalia,888,999,555,Traffic police โ€“777. +Tanzania,112,114,115,Police โ€“999. +Togo,117,8200,118, +Tristan Da Cunha,999,911,999, +Tunisia,197,190,198,National guard โ€“193. +Uganda,112,911,112,Police โ€“999; Fire โ€“999. +Afghanistan,119,112,119, +Bhutan,113,112,110, +Brunei,993,991,995,Search and Rescue โ€“998 +Cambodia,117,119,118,Child helpline โ€“1280 +People'S Republic Of China,110,120,119,Traffic accident reports โ€“122 +Iran,110,115,125,General emergencies is also110. Social Emergency โ€“123; Roads Traffic Information Center โ€“141; Iranian Red Crescent โ€“112(non-mobile phones).112and911redirect to110on mobile phones. +Israel,100,101,102,Israel Electric Corporationโ€“103;Home Front Commandโ€“104; Online child abuse hotline โ€“105; Non-emergency municipal hazards โ€“106; Non-emergency police inquiries โ€“110; Mobile phones โ€“112. +Laos,191,195,190, +Lebanon,999or112,140,175,Police โ€“160; Civil defense โ€“125. +Maldives,119,100,118, +Nepal,100,102,101,Traffic police โ€“103; From mobile phones โ€“112. +Pakistan,15,115and1122,16,Ambulance โ€“1122;Traffic police โ€“1915; Mobile phones โ€“112;PunjabWomen's toll free helpline โ€“1043;Tourist police โ€“1422;National Highways & Motorway Police โ€“130;Child Protection & Welfare Bureau โ€“1121. +Palestine,100,101,102, +Syria,112,110,113,Traffic police โ€“115. +Thailand,191,1669,199,191will be used as the only national emergency number in the future.Ambulance (Bangkok only) โ€“1646; Tourist police โ€“1155; Traffic control center (Bangkok Metro only) โ€“1197; Highway patrol โ€“1193; Mobile Phones โ€“112. +Uzbekistan,102,101,103,Emergency service โ€“1050; Gas leaks โ€“104; Housing and communal services โ€“1055.112is slated to become the number for all emergencies on 1 January 2024 in Tashkent and in all Uzbekistan by the end of 2024. +Vietnam,113,115,114,111โ€“ Child abuse +Albania,129,127,128,Traffic police โ€“126; Emergency at sea โ€“125.Mobile phones ambulance โ€“112 +Andorra,110,116,118,112โ€“ Mountain / Sky Rescue collaboration with Spanish (Catalan) and French authorities +Austria,112or133,144,122,"Gas emergency โ€“128; Mountain rescue โ€“140; Doctors โ€“141; Crisis hotline โ€“142; Support for children and teens โ€“147; Non-emergency police โ€“059 133; Deaf fax/SMS โ€“0800 133 133; Poisoning Informations Center โ€“01 406 43 43. The emergency telephone number112will be answered by the police, but will also handle other emergency services." +Azerbaijan,112or102,112or103,112or101,Gas Service โ€“104; Traffic police โ€“902; Electricity emergency โ€“199; Emergency โ€“112. +Belarus,102,103,101,Gas emergency โ€“104. +Bosnia And Herzegovina,122,124,123,Civil protection โ€“121. +Bulgaria,112 or 166,112 or 150,112 or 160, +Croatia,112 or 192,112 or 194,112 or 193,Search and rescue at sea โ€“112 or 195;Road helpโ€“1987. +Czech Republic,112or158,112or155,112or150,Municipal police โ€“156. +France,112or17,112or15,112or18,Deaf FAX/SMS โ€“114; Hotline for beaten children โ€“119; Missing children โ€“116 000; Maritime rescue โ€“196. +Greece,100,166,199,General emergencies โ€“112; Forest fire โ€“1591;Coast guardโ€“108; Counter-narcotics โ€“109; Tourist police โ€“171; Social aid โ€“197. +Hungary,112or107,112or104,112or105,Water emergency โ€“1817. +Kosovo,192,194,193, +Liechtenstein,117,144,118, +Monaco,17,112or15,112or18,112 15 and 18 redirects to fire brigade15 only works with a mobile phone and not with landlines +Montenegro,122or112,124or112,123or112,Emergency at sea:129 +North Macedonia,192or112[b],194or112[b],193or112[b],Police โ€“192; Ambulance โ€“194; Fire โ€“193. +Northern Cyprus,155,112,199,Forest Fire โ€“177; Coast Guard โ€“158; Civil Defense โ€“101. +Norway,112,113,110,Emergency at sea:120; non-emergency police:02 800;child abuse and family violence:116 111; text phone:1412;nearest health care outside office hours:116 117;911redirects to112. +Poland,997 or 112,999 or 112,998 or 112,"Road help โ€“981, Elevator emergency โ€“982, Veterinary emergency โ€“983, Rescue on lakes and rivers โ€“984or+48 601 100 100, Sea and mountain rescue โ€“985or+48 601 100 300,Municipal police (where operating) โ€“986, Crisis Management Centre (focus depends on voivodeship) โ€“987, Electricity emergency โ€“991, Gas emergency โ€“992, Heat engineering emergency โ€“993, Water emergency โ€“994, Child alert (operated by Police) โ€“995, Counterterrorism emergency โ€“996, Missing children (EU hotline) โ€“116 000Warsaw additionally maintains some local emergency numbers.911redirects to112." +Russia,102or112,103or112,101or112,Gas emergency โ€“104;112came into effect (for any emergency) in 2013 +San Marino,113,118,115, +Serbia,192or112,194,193,"Civil protection โ€“1985;112redirects to192. It is possible to dial 112 and get direct connection with the emergency services by pressing 1 for police, 2 for ambulance and 3 for fire on Vip operator mobile phones." +Slovakia,158,155,150,Municipal police โ€“159. +Switzerland,117,144,118,"Poison control โ€“145; Road help โ€“0800 140 140; Psychological support โ€“143; Psychological support for teens and children โ€“147;Regaair rescue โ€“1414or by radio on 161.300ย MHz;Air Glaciersair-rescue (Valaisonly) โ€“1415.The emergency number112is used differently based on theCanton. While in some cantons 112, 117, 118 and 114 are routed to a common emergency call center, in other cantons 112 together with 117 is directly routed to the police." +Ukraine,102,103,101,General emergencies โ€“112;Gas emergency โ€“104. +Nauru,110,111,112, +Niue,(+683) 4333,(+683) 4202,(+683) 4133, +Papua New Guinea,112,111,110, +Tokelau,(+690) 2116,(+690) 2112,, +Vanuatu,111,112,113, +El Salvador,911,132,913, +Guatemala,110,128,122,Police โ€“120; Fire โ€“123. +Honduras,911,195,198, +Nicaragua,118,128,115,Fire โ€“911. +Barbados,211,511,311, +Cuba,106,104,105, +Curacao,911,912,911, +Haiti,114,116,115,Police โ€“122. +Saint Martin,17,15,18, +Sint Maarten,911,912,919, +Trinidad And Tobago,999or911,811,990, +Brazil,190,192,193,Federal highway police โ€“191; Federal police โ€“194; Civil police โ€“197; State highway police โ€“198; Civil defense โ€“199; Municipal guard โ€“153; Human rights โ€“100; Emergency in Mercosul area โ€“128.112and911redirect to190on mobile phones;188โ€“ Hotline Help. +Chile,133,131,132,"Useful mnemonic isABC123:Ambulancia (Ambulance) โ€“ 131,Bomberos (Fire) โ€“ 132,Carabineros (Police) โ€“ 133.911and112redirect to133." +Guyana,911,913,912,"Childcare Protection Agency โ€“227-0979; Human Trafficking โ€“227-4083, 623-5030; Domestic Violence โ€“914." diff --git a/data-engineering/datasets/raw/emergency_numbers.csv b/data-engineering/datasets/raw/emergency_numbers.csv new file mode 100644 index 0000000..33e411e --- /dev/null +++ b/data-engineering/datasets/raw/emergency_numbers.csv @@ -0,0 +1,109 @@ +Country,Police,Ambulance,Fire,Notes +Country,Police,Ambulance,Fire,Notes +Angola,113[2],112/116[2],115[2], +Benin,117[4],112[4],118[4], +Burundi,117[5],112[5],118[5], +Botswana,999[6],997[6],998[6],Mobile phones โ€“112. +Burkina Faso,17[7],112[8],18[8], +Cape Verde,132,130,131, +Central African Republic,117,1220,118, +Chad,17,2251-4242,18,Ambulance โ€“2251-1237. +Comoros,17,772-03-73,18,Ambulance โ€“773-26-04. +Republic of Congo,117,,118[9], +Democratic Republic of Congo,112[10],,118, +Djibouti,17,19,18, +Egypt,112or122,123,180,Tourist police โ€“126; Traffic police โ€“128; Electricity emergency โ€“121; Gas emergency โ€“129; Mobile phones โ€“112. +Equatorial Guinea,114,115,112,Traffic police โ€“116. +Eritrea,113,114,116, +Eswatini,999,977,933, +Gabon,1730[13],1300,18, +Gambia,117,116,118,Police โ€“112; Electricity emergency โ€“124; Water emergency โ€“125. +Guinea,117,18,442-020,Maritime Emergency Service โ€“19; Gendarmerie โ€“118; National Gendarmerie โ€“122 +Ivory Coast,110or111or170,185,180, +Lesotho,123,121,122, +Madagascar,117,124,118,Traffic police โ€“3600. +Malawi,997,998,999,Police โ€“990. +Mali,17,15,18,"Ambulance โ€“112, Fire โ€“112." +Mauritania,117,101,118,Gendarmerie โ€“116; Traffic police โ€“119. +Mauritius,112,114,115,Police โ€“999; Fire โ€“995. +Mozambique,119,117,198, +Namibia,10 111,depending on town/city,depending on town/city, +Niger,17,15,18, +Rwanda,112[16],912,112[16],Traffic police โ€“113. +Senegal,17,18,1515, +Somalia,888,999,555,Traffic police โ€“777. +Tanzania,112,114,115,Police โ€“999. +Togo,117,8200,118, +Tristan da Cunha,999,911,999, +Tunisia,197,190,198,National guard โ€“193. +Uganda,112,911,112,Police โ€“999; Fire โ€“999. +Country,Police,Ambulance,Fire,Notes +Country,Police,Ambulance,Fire,Notes +Afghanistan,119[19],112[20],119[21], +Bhutan,113,112,110, +Brunei,993,991,995,Search and Rescue โ€“998 +Cambodia,117,119,118,Child helpline โ€“1280 +People's Republic of China,110,120,119,Traffic accident reports โ€“122[23] +Iran,110,115,125,General emergencies is also110. Social Emergency โ€“123; Roads Traffic Information Center โ€“141; Iranian Red Crescent โ€“112(non-mobile phones).112and911redirect to110on mobile phones. +Israel,100,101,102,Israel Electric Corporationโ€“103;Home Front Commandโ€“104; Online child abuse hotline โ€“105; Non-emergency municipal hazards โ€“106; Non-emergency police inquiries โ€“110; Mobile phones โ€“112. +Laos,191,195,190, +Lebanon,999or112,140,175,Police โ€“160; Civil defense โ€“125. +Maldives,119,100,118, +Nepal,100,102,101,Traffic police โ€“103; From mobile phones โ€“112. +Pakistan,15,115and1122,16,Ambulance โ€“1122;[38]Traffic police โ€“1915; Mobile phones โ€“112;PunjabWomen's toll free helpline โ€“1043;[39]Tourist police โ€“1422;[40]National Highways & Motorway Police โ€“130;[41]Child Protection & Welfare Bureau โ€“1121.[42] +Palestine,100,101,102, +Syria,112,110,113,Traffic police โ€“115. +Thailand,191[43],1669,199,191will be used as the only national emergency number in the future.[44]Ambulance (Bangkok only) โ€“1646; Tourist police โ€“1155; Traffic control center (Bangkok Metro only) โ€“1197; Highway patrol โ€“1193; Mobile Phones โ€“112.[45] +Uzbekistan,102,101,103,Emergency service โ€“1050; Gas leaks โ€“104; Housing and communal services โ€“1055.112is slated to become the number for all emergencies on 1 January 2024 in Tashkent and in all Uzbekistan by the end of 2024.[47] +Vietnam,113,115,114,111โ€“ Child abuse +Country,Police,Ambulance,Fire,Notes +Albania,129,127,128,Traffic police โ€“126; Emergency at sea โ€“125.[48]Mobile phones ambulance โ€“112 +Andorra,110,116,118,112โ€“ Mountain / Sky Rescue collaboration with Spanish (Catalan) and French authorities[49] +Austria,112or133,144,122,"Gas emergency โ€“128; Mountain rescue โ€“140; Doctors โ€“141; Crisis hotline โ€“142; Support for children and teens โ€“147; Non-emergency police โ€“059 133; Deaf fax/SMS โ€“0800 133 133; Poisoning Informations Center โ€“01 406 43 43. The emergency telephone number112will be answered by the police, but will also handle other emergency services." +Azerbaijan,112[51]or102,112or103,112or101,Gas Service โ€“104; Traffic police โ€“902; Electricity emergency โ€“199; Emergency โ€“112. +Belarus,102,103,101,Gas emergency โ€“104. +Bosnia and Herzegovina,122,124,123,Civil protection โ€“121. +Bulgaria,112 or 166,112 or 150,112 or 160, +Croatia,112 or 192,112 or 194,112 or 193,Search and rescue at sea โ€“112 or 195;Road helpโ€“1987. +Czech Republic,112or158,112or155,112or150,Municipal police โ€“156. +France,112or17,112or15,112or18,Deaf FAX/SMS โ€“114; Hotline for beaten children โ€“119; Missing children โ€“116 000; Maritime rescue โ€“196.[61] +Greece,100,166,199,General emergencies โ€“112; Forest fire โ€“1591;Coast guardโ€“108; Counter-narcotics โ€“109; Tourist police โ€“171; Social aid โ€“197. +Hungary,112or107,112or104,112or105,Water emergency โ€“1817.[62] +Kosovo,192,194,193, +Liechtenstein,117,144,118, +Monaco,17,112or15,112or18,112 15 and 18 redirects to fire brigade15 only works with a mobile phone and not with landlines +Montenegro,122or112,124or112,123or112,Emergency at sea:129 +North Macedonia,192or112[b],194or112[b],193or112[b],Police โ€“192; Ambulance โ€“194; Fire โ€“193. +Northern Cyprus[69],155,112,199,Forest Fire โ€“177; Coast Guard โ€“158; Civil Defense โ€“101. +Norway,112[70],113[70],110[70],Emergency at sea:120; non-emergency police:02 800;[71]child abuse and family violence:116 111; text phone:1412;[70]nearest health care outside office hours:116 117;[72]911redirects to112.[73] +Poland,997 or 112[74],999 or 112[74],998 or 112[74],"Road help โ€“981, Elevator emergency โ€“982, Veterinary emergency โ€“983, Rescue on lakes and rivers โ€“984or+48 601 100 100, Sea and mountain rescue โ€“985or+48 601 100 300,Municipal police (where operating) โ€“986, Crisis Management Centre (focus depends on voivodeship) โ€“987, Electricity emergency โ€“991, Gas emergency โ€“992, Heat engineering emergency โ€“993, Water emergency โ€“994, Child alert (operated by Police) โ€“995, Counterterrorism emergency โ€“996, Missing children (EU hotline) โ€“116 000[75][76]Warsaw additionally maintains some local emergency numbers.[77][78]911redirects to112.[79]" +Russia,102or112,103or112,101or112,Gas emergency โ€“104;112came into effect (for any emergency) in 2013 +San Marino,113,118,115, +Serbia,192or112,194,193,"Civil protection โ€“1985;112redirects to192. It is possible to dial 112 and get direct connection with the emergency services by pressing 1 for police, 2 for ambulance and 3 for fire on Vip operator mobile phones.[80]" +Slovakia,158,155,150,Municipal police โ€“159. +Switzerland,117,144,118,"Poison control โ€“145; Road help โ€“0800 140 140; Psychological support โ€“143; Psychological support for teens and children โ€“147;Regaair rescue โ€“1414or by radio on 161.300ย MHz;Air Glaciersair-rescue (Valaisonly) โ€“1415.[81]The emergency number112is used differently based on theCanton. While in some cantons 112, 117, 118 and 114 are routed to a common emergency call center, in other cantons 112 together with 117 is directly routed to the police." +Ukraine,102,103,101,General emergencies โ€“112;[83]Gas emergency โ€“104. +Country,Police,Ambulance,Fire,Notes +Nauru,110,111,112,[95] +Niue,(+683) 4333,(+683) 4202,(+683) 4133,[97] +Papua New Guinea,112,111,110, +Tokelau,(+690) 2116,(+690) 2112,,[101] +Vanuatu,111,112,113,[102][103] +Country,Police,Ambulance,Fire,Notes +El Salvador,911[106],132,913, +Guatemala,110,128,122,Police โ€“120; Fire โ€“123. +Honduras,911,195,198, +Nicaragua,118,128,115,Fire โ€“911.[107] +Country,Police,Ambulance,Fire,Notes +Barbados,211,511,311, +Cuba,106,104,105, +Curacao,911[110],912,911, +Haiti,114,116,115,Police โ€“122.[107] +Saint Martin,17,15,18,[112] +Sint Maarten,911,912,919,[114] +Trinidad and Tobago,999or911,811,990, +Country,Police,Ambulance,Fire,Notes +Country,Police,Ambulance,Fire,Notes +Brazil,190,192,193,Federal highway police โ€“191; Federal police โ€“194; Civil police โ€“197; State highway police โ€“198; Civil defense โ€“199; Municipal guard โ€“153; Human rights โ€“100; Emergency in Mercosul area โ€“128.112and911redirect to190on mobile phones;188โ€“ Hotline Help. +Chile,133,131,132,"Useful mnemonic isABC123:Ambulancia (Ambulance) โ€“ 131,Bomberos (Fire) โ€“ 132,Carabineros (Police) โ€“ 133.911and112redirect to133." +Guyana,911,913,912,"Childcare Protection Agency โ€“227-0979; Human Trafficking โ€“227-4083, 623-5030; Domestic Violence โ€“914.[120]" diff --git a/data-engineering/deploy-lambda.yml b/data-engineering/deploy-lambda.yml new file mode 100644 index 0000000..8585349 --- /dev/null +++ b/data-engineering/deploy-lambda.yml @@ -0,0 +1,101 @@ +name: Deploy Lambda Function + +# WHEN: Only runs when you manually trigger it from the Actions tab. +# Nobody can trigger this by pushing code or opening a PR. +on: + workflow_dispatch: + inputs: + source_folder: + description: 'Source folder name under src/ (e.g., aggregator)' + required: true + type: string + lambda_function_name: + description: 'Exact AWS Lambda function name (e.g., saayam-org-aggregator)' + required: true + type: string + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + + # STEP 1: Security gate โ€” only YOUR username gets through. + # Replace YOUR_GITHUB_USERNAME below with your actual GitHub username. + - name: Check if authorized to deploy + run: | + if [ "${{ github.actor }}" != "saquibb8" ]; then + echo "โŒ Unauthorized. Only saquibb8 can deploy." + exit 1 + fi + echo "โœ… Authorized: ${{ github.actor }}" + + # STEP 2: Pull the latest code from the repo. + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: main # Always deploy from main branch + + # STEP 3: Set up Python (matches your repo's Python 3.10+ requirement). + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.10' + + # STEP 4: Build the deployment package. + # This installs dependencies + copies source code into one folder. + - name: Build deployment package + run: | + mkdir package + + # Install Lambda-specific dependencies (if requirements.txt exists) + if [ -f src/${{ inputs.source_folder }}/requirements.txt ]; then + echo "๐Ÿ“ฆ Installing dependencies..." + pip install -r src/${{ inputs.source_folder }}/requirements.txt -t package/ --quiet + fi + + # Copy the Lambda's source code + echo "๐Ÿ“‚ Copying src/${{ inputs.source_folder }}/ ..." + cp -r src/${{ inputs.source_folder }}/* package/ + + # Copy shared utilities (so imports like "from utils.db_client import ..." work) + if [ -d src/utils ]; then + echo "๐Ÿ“‚ Copying src/utils/ ..." + cp -r src/utils package/ + fi + + # Copy shared models (so imports like "from models.fraud_requests import ..." work) + if [ -d src/models ]; then + echo "๐Ÿ“‚ Copying src/models/ ..." + cp -r src/models package/ + fi + + # STEP 5: Zip everything up. + - name: Create zip file + run: | + cd package + zip -r ../deployment.zip . --quiet + cd .. + echo "๐Ÿ“ฆ Package size: $(du -h deployment.zip | cut -f1)" + + # STEP 6: Set up AWS credentials from your GitHub Secrets. + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: ${{ secrets.AWS_REGION }} + + # STEP 7: Deploy to Lambda. + - name: Deploy to AWS Lambda + run: | + echo "๐Ÿš€ Deploying to: ${{ inputs.lambda_function_name }}" + + aws lambda update-function-code \ + --function-name "${{ inputs.lambda_function_name }}" \ + --zip-file fileb://deployment.zip \ + --publish \ + --output table + + echo "" + echo "โœ… ${{ inputs.lambda_function_name }} deployed successfully!" \ No newline at end of file diff --git a/data-engineering/infrastructure/Dockerfile b/data-engineering/infrastructure/Dockerfile new file mode 100644 index 0000000..24db1c8 --- /dev/null +++ b/data-engineering/infrastructure/Dockerfile @@ -0,0 +1,22 @@ +# Use an official Python runtime as a parent image +FROM python:3.9-slim + +# Set the working directory in the container +WORKDIR /app + +# Copy the current directory contents into the container at /app +COPY . /app + +# Install any needed packages specified in requirements.txt +RUN pip install --no-cache-dir -r requirements.txt + +# Set environment variables +#ENV DATABASE_URL="postgresql://postgres:password@localhost:5432/Saayam" +ENV FLASK_APP=app.py + +# Make port 5000 available to the world outside this container +EXPOSE 5000 + +# Run the application +CMD ["flask", "run", "--host=0.0.0.0"] + diff --git a/data-engineering/infrastructure/deployment.yaml b/data-engineering/infrastructure/deployment.yaml new file mode 100644 index 0000000..e9036bf --- /dev/null +++ b/data-engineering/infrastructure/deployment.yaml @@ -0,0 +1,20 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: flask-app +spec: + replicas: 3 + selector: + matchLabels: + app: flask-app + template: + metadata: + labels: + app: flask-app + spec: + containers: + - name: flask-app + image: samirtalkal/flask-app:latest + imagePullPolicy: Always + ports: + - containerPort: 5000 diff --git a/data-engineering/infrastructure/docker-compose.yml b/data-engineering/infrastructure/docker-compose.yml new file mode 100644 index 0000000..424a2ed --- /dev/null +++ b/data-engineering/infrastructure/docker-compose.yml @@ -0,0 +1,8 @@ +#version: '3' +services: + web: + build: . + ports: + - "5001:5000" + environment: + - FLASK_APP=app.py diff --git a/data-engineering/infrastructure/service.yaml b/data-engineering/infrastructure/service.yaml new file mode 100644 index 0000000..5fec77e --- /dev/null +++ b/data-engineering/infrastructure/service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: flask-app-service +spec: + type: NodePort + selector: + app: flask-app + ports: + - protocol: TCP + port: 5000 + targetPort: 5000 + nodePort: 30000 diff --git a/data-engineering/notebooks/analytics_sql_and_visualizations.ipynb b/data-engineering/notebooks/analytics_sql_and_visualizations.ipynb new file mode 100644 index 0000000..6061bfb --- /dev/null +++ b/data-engineering/notebooks/analytics_sql_and_visualizations.ipynb @@ -0,0 +1,7086 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "code", + "source": [ + "from google.colab import files\n", + "uploaded = files.upload() # Upload your renamed file (e.g., env.txt)\n", + "\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 72 + }, + "id": "LGZ2-As7oB6j", + "outputId": "07e2d237-a5cf-4db6-e6ec-15ce2b5c4d1e" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " \n", + " Upload widget is only available when the cell has been executed in the\n", + " current browser session. Please rerun this cell to enable.\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saving env.txt to env.txt\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "!mv env.txt .env\n" + ], + "metadata": { + "id": "E5T5wQnoqErO" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from dotenv import load_dotenv\n", + "import os\n", + "\n", + "load_dotenv() # This will read from the .env file\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "6zIAg84Apwwv", + "outputId": "d14e0024-0c56-4870-a022-d0fe1aee8493" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "True" + ] + }, + "metadata": {}, + "execution_count": 102 + } + ] + }, + { + "cell_type": "code", + "source": [ + "import psycopg2\n", + "\n", + "DB_CONFIG = {\n", + " \"dbname\": os.getenv(\"DB_NAME\"),\n", + " \"user\": os.getenv(\"DB_USER\"),\n", + " \"password\": os.getenv(\"DB_PASSWORD\"),\n", + " \"host\": os.getenv(\"DB_HOST\"),\n", + " \"port\": os.getenv(\"DB_PORT\"),\n", + "}\n", + "\n", + "try:\n", + " conn = psycopg2.connect(**DB_CONFIG)\n", + " print(\"โœ… Connected to the database successfully!\")\n", + "except Exception as e:\n", + " print(\"โŒ Failed to connect to the database:\")\n", + " print(e)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "XN4GPtaJoHrP", + "outputId": "b652042a-0632-45c6-e303-f6938c362e9e" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "โœ… Connected to the database successfully!\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Function to test a single query\n", + "def run_query(label, query):\n", + " try:\n", + " print(f\"๐Ÿ“Š {label}\")\n", + " df = pd.read_sql(query, conn)\n", + " display(df)\n", + " except Exception as e:\n", + " print(f\"โŒ Error in '{label}':\\n{e}\")\n", + " print(\"-\" * 60)" + ], + "metadata": { + "id": "lp9sXH-U3QeQ" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Show all tables\n", + "pd.read_sql(\"\"\"\n", + "SELECT table_name\n", + "FROM information_schema.tables\n", + "WHERE table_schema = 'public';\n", + "\"\"\", conn)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 429 + }, + "id": "3mb37IRZ77uH", + "outputId": "b0249025-8d06-4d3d-a0d4-393bbb9ccccd" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":2: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", + " pd.read_sql(\"\"\"\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " table_name\n", + "0 state\n", + "1 country\n", + "2 user_category\n", + "3 user_status\n", + "4 users\n", + "5 request_category\n", + "6 user_additional_details\n", + "7 user_availability\n", + "8 volunteer_details\n", + "9 saayam_users\n", + "10 ngos" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
table_name
0state
1country
2user_category
3user_status
4users
5request_category
6user_additional_details
7user_availability
8volunteer_details
9saayam_users
10ngos
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"\\\"\\\"\\\", conn)\",\n \"rows\": 11,\n \"fields\": [\n {\n \"column\": \"table_name\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 11,\n \"samples\": [\n \"request_category\",\n \"state\",\n \"saayam_users\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 105 + } + ] + }, + { + "cell_type": "code", + "source": [ + "#Preview of All Tables in the Database\n", + "tables = [\n", + " \"state\",\n", + " \"country\",\n", + " \"user_category\",\n", + " \"user_status\",\n", + " \"users\",\n", + " \"request_category\",\n", + " \"user_additional_details\",\n", + " \"user_availability\",\n", + " \"volunteer_details\",\n", + " \"saayam_users\",\n", + " \"ngos\"\n", + "]\n", + "\n", + "# Show first 5 rows of each table\n", + "for table in tables:\n", + " print(f\"\\n๐Ÿ“Œ Preview of table: {table}\")\n", + " display(pd.read_sql(f\"SELECT * FROM {table};\", conn))\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "ndmwxXSwgPTB", + "outputId": "dcd8deef-7786-4cd3-948c-476fa826791a" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "๐Ÿ“Œ Preview of table: state\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":19: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", + " display(pd.read_sql(f\"SELECT * FROM {table};\", conn))\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Empty DataFrame\n", + "Columns: [state_id, country_id, state_name, last_update_date]\n", + "Index: []" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
state_idcountry_idstate_namelast_update_date
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "repr_error": "Out of range float values are not JSON compliant: nan" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "๐Ÿ“Œ Preview of table: country\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":19: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", + " display(pd.read_sql(f\"SELECT * FROM {table};\", conn))\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " country_id country_name phone_country_code last_update_date\n", + "0 1 United States +1 None" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
country_idcountry_namephone_country_codelast_update_date
01United States+1None
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "repr_error": "Out of range float values are not JSON compliant: nan" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "๐Ÿ“Œ Preview of table: user_category\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":19: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", + " display(pd.read_sql(f\"SELECT * FROM {table};\", conn))\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " user_category_id user_category \\\n", + "0 1 MEMBER \n", + "1 2 DONOR \n", + "2 3 VOLUNTEER \n", + "3 4 MEMBER \n", + "4 5 DONOR \n", + "... ... ... \n", + "1351 1346 DONOR \n", + "1352 1347 VOLUNTEER \n", + "1353 1348 MEMBER \n", + "1354 1349 DONOR \n", + "1355 1350 VOLUNTEER \n", + "\n", + " user_category_desc \\\n", + "0 Represents a member of the organization. \n", + "1 Represents a donor who contributes to the orga... \n", + "2 Represents a volunteer who participates in the... \n", + "3 Represents a member of the organization. \n", + "4 Represents a donor who contributes to the orga... \n", + "... ... \n", + "1351 Represents a donor who contributes to the orga... \n", + "1352 Represents a volunteer who participates in the... \n", + "1353 Represents a member of the organization. \n", + "1354 Represents a donor who contributes to the orga... \n", + "1355 Represents a volunteer who participates in the... \n", + "\n", + " last_update_date \n", + "0 2024-09-30 09:23:41.626753+00:00 \n", + "1 2024-09-30 09:23:41.626753+00:00 \n", + "2 2024-09-30 09:23:41.626753+00:00 \n", + "3 2024-09-30 04:24:02.864295+00:00 \n", + "4 2024-09-30 04:24:02.864295+00:00 \n", + "... ... \n", + "1351 2025-02-14 08:21:57.516991+00:00 \n", + "1352 2025-02-14 08:21:57.516991+00:00 \n", + "1353 2025-02-14 08:21:57.556866+00:00 \n", + "1354 2025-02-14 08:21:57.556866+00:00 \n", + "1355 2025-02-14 08:21:57.556866+00:00 \n", + "\n", + "[1356 rows x 4 columns]" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
user_category_iduser_categoryuser_category_desclast_update_date
01MEMBERRepresents a member of the organization.2024-09-30 09:23:41.626753+00:00
12DONORRepresents a donor who contributes to the orga...2024-09-30 09:23:41.626753+00:00
23VOLUNTEERRepresents a volunteer who participates in the...2024-09-30 09:23:41.626753+00:00
34MEMBERRepresents a member of the organization.2024-09-30 04:24:02.864295+00:00
45DONORRepresents a donor who contributes to the orga...2024-09-30 04:24:02.864295+00:00
...............
13511346DONORRepresents a donor who contributes to the orga...2025-02-14 08:21:57.516991+00:00
13521347VOLUNTEERRepresents a volunteer who participates in the...2025-02-14 08:21:57.516991+00:00
13531348MEMBERRepresents a member of the organization.2025-02-14 08:21:57.556866+00:00
13541349DONORRepresents a donor who contributes to the orga...2025-02-14 08:21:57.556866+00:00
13551350VOLUNTEERRepresents a volunteer who participates in the...2025-02-14 08:21:57.556866+00:00
\n", + "

1356 rows ร— 4 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \" display(pd\",\n \"rows\": 1356,\n \"fields\": [\n {\n \"column\": \"user_category_id\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 391,\n \"min\": 1,\n \"max\": 1356,\n \"num_unique_values\": 1356,\n \"samples\": [\n 50,\n 842,\n 1275\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"user_category\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 3,\n \"samples\": [\n \"MEMBER\",\n \"DONOR\",\n \"VOLUNTEER\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"user_category_desc\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 3,\n \"samples\": [\n \"Represents a member of the organization.\",\n \"Represents a donor who contributes to the organization.\",\n \"Represents a volunteer who participates in the activities.\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"last_update_date\",\n \"properties\": {\n \"dtype\": \"date\",\n \"min\": \"2024-09-30 04:24:02.864295+00:00\",\n \"max\": \"2025-02-14 08:22:07.300555+00:00\",\n \"num_unique_values\": 452,\n \"samples\": [\n \"2025-02-06 22:53:17.480348+00:00\",\n \"2024-11-11 05:51:10.184999+00:00\",\n \"2025-02-07 00:23:46.770726+00:00\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "๐Ÿ“Œ Preview of table: user_status\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":19: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", + " display(pd.read_sql(f\"SELECT * FROM {table};\", conn))\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " user_status_id user_status \\\n", + "0 1 ACTIVE \n", + "1 2 INACTIVE \n", + "2 3 PENDING \n", + "3 4 ONHOLD \n", + "4 5 ACTIVE \n", + "... ... ... \n", + "1803 1804 ONHOLD \n", + "1804 1805 ACTIVE \n", + "1805 1806 INACTIVE \n", + "1806 1807 PENDING \n", + "1807 1808 ONHOLD \n", + "\n", + " user_status_desc \\\n", + "0 The volunteer is currently engaged and activel... \n", + "1 The volunteer is not currently participating i... \n", + "2 The volunteer has expressed interest but has n... \n", + "3 The volunteerโ€™s activities are temporarily sus... \n", + "4 The volunteer is currently engaged and activel... \n", + "... ... \n", + "1803 The volunteerโ€™s activities are temporarily sus... \n", + "1804 The volunteer is currently engaged and activel... \n", + "1805 The volunteer is not currently participating i... \n", + "1806 The volunteer has expressed interest but has n... \n", + "1807 The volunteerโ€™s activities are temporarily sus... \n", + "\n", + " last_update_date \n", + "0 2024-09-30 09:23:41.626753+00:00 \n", + "1 2024-09-30 09:23:41.626753+00:00 \n", + "2 2024-09-30 09:23:41.626753+00:00 \n", + "3 2024-09-30 09:23:41.626753+00:00 \n", + "4 2024-09-30 04:24:02.830178+00:00 \n", + "... ... \n", + "1803 2025-02-14 08:22:07.262951+00:00 \n", + "1804 2025-02-14 08:22:07.298526+00:00 \n", + "1805 2025-02-14 08:22:07.298526+00:00 \n", + "1806 2025-02-14 08:22:07.298526+00:00 \n", + "1807 2025-02-14 08:22:07.298526+00:00 \n", + "\n", + "[1808 rows x 4 columns]" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
user_status_iduser_statususer_status_desclast_update_date
01ACTIVEThe volunteer is currently engaged and activel...2024-09-30 09:23:41.626753+00:00
12INACTIVEThe volunteer is not currently participating i...2024-09-30 09:23:41.626753+00:00
23PENDINGThe volunteer has expressed interest but has n...2024-09-30 09:23:41.626753+00:00
34ONHOLDThe volunteerโ€™s activities are temporarily sus...2024-09-30 09:23:41.626753+00:00
45ACTIVEThe volunteer is currently engaged and activel...2024-09-30 04:24:02.830178+00:00
...............
18031804ONHOLDThe volunteerโ€™s activities are temporarily sus...2025-02-14 08:22:07.262951+00:00
18041805ACTIVEThe volunteer is currently engaged and activel...2025-02-14 08:22:07.298526+00:00
18051806INACTIVEThe volunteer is not currently participating i...2025-02-14 08:22:07.298526+00:00
18061807PENDINGThe volunteer has expressed interest but has n...2025-02-14 08:22:07.298526+00:00
18071808ONHOLDThe volunteerโ€™s activities are temporarily sus...2025-02-14 08:22:07.298526+00:00
\n", + "

1808 rows ร— 4 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \" display(pd\",\n \"rows\": 1808,\n \"fields\": [\n {\n \"column\": \"user_status_id\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 522,\n \"min\": 1,\n \"max\": 1808,\n \"num_unique_values\": 1808,\n \"samples\": [\n 1614,\n 65,\n 700\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"user_status\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"INACTIVE\",\n \"ONHOLD\",\n \"ACTIVE\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"user_status_desc\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"The volunteer is not currently participating in any volunteering activities.\",\n \"The volunteer\\u00e2\\u20ac\\u2122s activities are temporarily suspended, possibly due to personal reasons, vacations etc.\",\n \"The volunteer has expressed interest but has not yet started volunteering or is awaiting assignment.\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"last_update_date\",\n \"properties\": {\n \"dtype\": \"date\",\n \"min\": \"2024-09-30 04:24:02.830178+00:00\",\n \"max\": \"2025-02-14 08:22:07.298526+00:00\",\n \"num_unique_values\": 452,\n \"samples\": [\n \"2025-02-06 23:07:38.869106+00:00\",\n \"2024-10-28 02:05:56.475511+00:00\",\n \"2025-02-07 00:35:14.936763+00:00\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "๐Ÿ“Œ Preview of table: users\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":19: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", + " display(pd.read_sql(f\"SELECT * FROM {table};\", conn))\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " user_id state_id country_id user_status_id \\\n", + "0 SID-00-000-000-006 None NaN 1 \n", + "1 SID-00-000-000-001 None NaN 1 \n", + "2 SID-00-000-000-269 None NaN 1 \n", + "3 SID-00-000-000-186 None NaN 1 \n", + "4 SID-00-000-000-003 None NaN 1 \n", + ".. ... ... ... ... \n", + "113 SID-00-000-000-940 None NaN 1 \n", + "114 SID-00-000-000-615 None NaN 1 \n", + "115 SID-00-000-000-713 None NaN 1 \n", + "116 SID-00-000-000-954 None NaN 1 \n", + "117 SID-00-000-000-633 None NaN 1 \n", + "\n", + " user_category_id full_name first_name middle_name \\\n", + "0 1 Eliza None None \n", + "1 1 User 1 None None \n", + "2 1 SMITKUMAR G PATEL None None \n", + "3 1 r r None None \n", + "4 1 Sayali Oak None None \n", + ".. ... ... ... ... \n", + "113 1 Anil Poojari None None \n", + "114 1 oscar tal None None \n", + "115 1 Lin Yang None None \n", + "116 1 Lakshmi Praneetha Kamarajugadda None None \n", + "117 1 Pushpitha Thalluru None None \n", + "\n", + " last_name primary_email_address ... profile_picture_path \\\n", + "0 None lianweideng@gmail.com ... None \n", + "1 None user@gmail.com ... None \n", + "2 None patelsmitg016@gmail.com ... None \n", + "3 None ninjakiwiunosorry@gmail.com ... None \n", + "4 None sayali@gmail.com ... None \n", + ".. ... ... ... ... \n", + "113 None anilpoojari14@gmail.com ... None \n", + "114 None mmm@gmail.com ... None \n", + "115 None lxy2421997@gmail.com ... None \n", + "116 None praneetha.dr.ms@gmail.com ... None \n", + "117 None pthallur@kent.edu ... None \n", + "\n", + " passport_doc drivers_license gender language_1 language_2 language_3 \\\n", + "0 None None None None None None \n", + "1 None None None None None None \n", + "2 None None None None None None \n", + "3 None None None None None None \n", + "4 None None None None None None \n", + ".. ... ... ... ... ... ... \n", + "113 None None None None None None \n", + "114 None None None None None None \n", + "115 None None None None None None \n", + "116 None None None None None None \n", + "117 None None None None None None \n", + "\n", + " last_location promotion_wizard_stage promotion_wizard_last_update_date \n", + "0 None NaN NaT \n", + "1 None 1.0 2025-03-12 18:53:28.471223+00:00 \n", + "2 None 1.0 2025-03-22 21:14:22.212132+00:00 \n", + "3 None 1.0 2025-03-12 20:38:23.528909+00:00 \n", + "4 None 1.0 2025-03-12 23:31:50.599141+00:00 \n", + ".. ... ... ... \n", + "113 None NaN NaT \n", + "114 None NaN NaT \n", + "115 None NaN NaT \n", + "116 None NaN NaT \n", + "117 None NaN NaT \n", + "\n", + "[118 rows x 32 columns]" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
user_idstate_idcountry_iduser_status_iduser_category_idfull_namefirst_namemiddle_namelast_nameprimary_email_address...profile_picture_pathpassport_docdrivers_licensegenderlanguage_1language_2language_3last_locationpromotion_wizard_stagepromotion_wizard_last_update_date
0SID-00-000-000-006NoneNaN11ElizaNoneNoneNonelianweideng@gmail.com...NoneNoneNoneNoneNoneNoneNoneNoneNaNNaT
1SID-00-000-000-001NoneNaN11User 1NoneNoneNoneuser@gmail.com...NoneNoneNoneNoneNoneNoneNoneNone1.02025-03-12 18:53:28.471223+00:00
2SID-00-000-000-269NoneNaN11SMITKUMAR G PATELNoneNoneNonepatelsmitg016@gmail.com...NoneNoneNoneNoneNoneNoneNoneNone1.02025-03-22 21:14:22.212132+00:00
3SID-00-000-000-186NoneNaN11r rNoneNoneNoneninjakiwiunosorry@gmail.com...NoneNoneNoneNoneNoneNoneNoneNone1.02025-03-12 20:38:23.528909+00:00
4SID-00-000-000-003NoneNaN11Sayali OakNoneNoneNonesayali@gmail.com...NoneNoneNoneNoneNoneNoneNoneNone1.02025-03-12 23:31:50.599141+00:00
..................................................................
113SID-00-000-000-940NoneNaN11Anil PoojariNoneNoneNoneanilpoojari14@gmail.com...NoneNoneNoneNoneNoneNoneNoneNoneNaNNaT
114SID-00-000-000-615NoneNaN11oscar talNoneNoneNonemmm@gmail.com...NoneNoneNoneNoneNoneNoneNoneNoneNaNNaT
115SID-00-000-000-713NoneNaN11Lin YangNoneNoneNonelxy2421997@gmail.com...NoneNoneNoneNoneNoneNoneNoneNoneNaNNaT
116SID-00-000-000-954NoneNaN11Lakshmi Praneetha KamarajugaddaNoneNoneNonepraneetha.dr.ms@gmail.com...NoneNoneNoneNoneNoneNoneNoneNoneNaNNaT
117SID-00-000-000-633NoneNaN11Pushpitha ThalluruNoneNoneNonepthallur@kent.edu...NoneNoneNoneNoneNoneNoneNoneNoneNaNNaT
\n", + "

118 rows ร— 32 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "๐Ÿ“Œ Preview of table: request_category\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":19: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", + " display(pd.read_sql(f\"SELECT * FROM {table};\", conn))\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Empty DataFrame\n", + "Columns: [request_category_id, request_category, request_category_desc, last_updated_date]\n", + "Index: []" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
request_category_idrequest_categoryrequest_category_desclast_updated_date
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "repr_error": "Out of range float values are not JSON compliant: nan" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "๐Ÿ“Œ Preview of table: user_additional_details\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":19: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", + " display(pd.read_sql(f\"SELECT * FROM {table};\", conn))\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Empty DataFrame\n", + "Columns: [additional_detail_id, user_id, secondary_email_1, secondary_email_2, secondary_phone_1, secondary_phone_2]\n", + "Index: []" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
additional_detail_iduser_idsecondary_email_1secondary_email_2secondary_phone_1secondary_phone_2
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "repr_error": "Out of range float values are not JSON compliant: nan" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "๐Ÿ“Œ Preview of table: user_availability\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":19: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", + " display(pd.read_sql(f\"SELECT * FROM {table};\", conn))\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " user_availability_id day_of_week end_time \\\n", + "0 3 Monday 2024-02-14 17:00:00+00:00 \n", + "1 53 Monday 2024-02-14 17:00:00+00:00 \n", + "2 302 Monday 2024-02-14 17:00:00+00:00 \n", + "3 352 Everyday 2025-03-10 15:03:00+00:00 \n", + "4 353 Everyday 2025-03-10 10:02:00+00:00 \n", + "5 1902 Everyday 2025-04-18 12:00:00+00:00 \n", + "\n", + " last_update_date start_time user_id \n", + "0 2024-02-14 08:00:00+00:00 2024-02-14 09:00:00+00:00 SID-00-000-000-106 \n", + "1 2024-02-14 08:00:00+00:00 2024-02-14 09:00:00+00:00 SID-00-000-000-015 \n", + "2 2024-02-14 08:00:00+00:00 2024-02-14 09:00:00+00:00 SID-00-000-000-009 \n", + "3 NaT 2025-03-10 10:03:00+00:00 SID-00-000-000-134 \n", + "4 NaT 2025-03-10 09:11:00+00:00 SID-00-000-000-178 \n", + "5 NaT 2025-04-18 09:00:00+00:00 SID-00-000-000-228 " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
user_availability_idday_of_weekend_timelast_update_datestart_timeuser_id
03Monday2024-02-14 17:00:00+00:002024-02-14 08:00:00+00:002024-02-14 09:00:00+00:00SID-00-000-000-106
153Monday2024-02-14 17:00:00+00:002024-02-14 08:00:00+00:002024-02-14 09:00:00+00:00SID-00-000-000-015
2302Monday2024-02-14 17:00:00+00:002024-02-14 08:00:00+00:002024-02-14 09:00:00+00:00SID-00-000-000-009
3352Everyday2025-03-10 15:03:00+00:00NaT2025-03-10 10:03:00+00:00SID-00-000-000-134
4353Everyday2025-03-10 10:02:00+00:00NaT2025-03-10 09:11:00+00:00SID-00-000-000-178
51902Everyday2025-04-18 12:00:00+00:00NaT2025-04-18 09:00:00+00:00SID-00-000-000-228
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \" display(pd\",\n \"rows\": 6,\n \"fields\": [\n {\n \"column\": \"user_availability_id\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 706,\n \"min\": 3,\n \"max\": 1902,\n \"num_unique_values\": 6,\n \"samples\": [\n 3,\n 53,\n 1902\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"day_of_week\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"Everyday\",\n \"Monday\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"end_time\",\n \"properties\": {\n \"dtype\": \"date\",\n \"min\": \"2024-02-14 17:00:00+00:00\",\n \"max\": \"2025-04-18 12:00:00+00:00\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"2025-03-10 15:03:00+00:00\",\n \"2025-04-18 12:00:00+00:00\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"last_update_date\",\n \"properties\": {\n \"dtype\": \"date\",\n \"min\": \"2024-02-14 08:00:00+00:00\",\n \"max\": \"2024-02-14 08:00:00+00:00\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"2024-02-14 08:00:00+00:00\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"start_time\",\n \"properties\": {\n \"dtype\": \"date\",\n \"min\": \"2024-02-14 09:00:00+00:00\",\n \"max\": \"2025-04-18 09:00:00+00:00\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"2025-03-10 10:03:00+00:00\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"user_id\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 6,\n \"samples\": [\n \"SID-00-000-000-106\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "๐Ÿ“Œ Preview of table: volunteer_details\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":19: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", + " display(pd.read_sql(f\"SELECT * FROM {table};\", conn))\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " volunteer_detail_id user_id terms_and_conditions \\\n", + "0 2002 SID-00-000-000-166 True \n", + "1 2052 SID-00-000-000-150 True \n", + "2 652 SID-00-000-000-004 None \n", + "3 752 SID-00-000-000-133 True \n", + "4 753 SID-00-000-000-134 True \n", + "5 802 SID-00-000-000-158 True \n", + "6 754 SID-00-000-000-178 True \n", + "7 852 SID-00-000-000-215 True \n", + "8 803 SID-00-000-000-152 True \n", + "9 402 SID-00-000-000-009 True \n", + "10 2 SID-00-000-000-015 False \n", + "11 1252 SID-00-000-000-231 True \n", + "12 1152 SID-00-000-000-186 True \n", + "13 502 SID-00-000-000-005 True \n", + "14 302 SID-00-000-000-106 True \n", + "15 902 SID-00-000-000-131 True \n", + "16 452 SID-00-000-000-008 True \n", + "17 602 SID-00-000-000-195 True \n", + "18 1052 SID-00-000-000-001 True \n", + "19 1202 SID-00-000-000-219 True \n", + "20 1203 SID-00-000-000-199 True \n", + "21 1204 SID-00-000-000-003 True \n", + "22 3602 SID-00-000-000-484 True \n", + "23 2102 SID-00-000-000-232 True \n", + "24 1302 SID-00-000-000-086 True \n", + "25 1352 SID-00-000-000-127 True \n", + "26 1402 SID-00-000-000-191 None \n", + "27 1452 SID-00-000-000-230 True \n", + "28 1502 SID-00-000-000-187 True \n", + "29 1552 SID-00-000-000-174 True \n", + "30 1602 SID-00-000-000-144 True \n", + "31 1702 SID-00-000-000-014 None \n", + "32 1752 SID-00-000-000-203 True \n", + "33 1802 SID-00-000-000-170 True \n", + "34 1852 SID-00-000-000-229 True \n", + "35 1853 SID-00-000-000-153 None \n", + "36 1902 SID-00-000-000-157 True \n", + "37 1952 SID-00-000-000-227 True \n", + "38 2152 SID-00-000-000-132 True \n", + "39 2202 SID-00-000-000-257 True \n", + "40 2252 SID-00-000-000-336 True \n", + "41 2302 SID-00-000-000-353 True \n", + "42 2352 SID-00-000-000-269 True \n", + "43 653 SID-00-000-000-102 True \n", + "44 702 SID-00-000-000-013 True \n", + "45 2452 SID-00-000-000-237 True \n", + "46 1652 SID-00-000-000-010 True \n", + "47 3802 SID-00-000-000-143 True \n", + "48 2402 SID-00-000-000-242 True \n", + "49 3752 SID-00-000-000-138 True \n", + "\n", + " terms_and_conditions_update_date \\\n", + "0 2025-03-19 14:19:05.383562+00:00 \n", + "1 2025-03-20 23:54:34.338345+00:00 \n", + "2 2025-03-10 19:08:20.863791+00:00 \n", + "3 2025-03-10 23:04:28.666676+00:00 \n", + "4 2025-03-10 23:10:19.668501+00:00 \n", + "5 2025-03-10 23:36:41.148424+00:00 \n", + "6 2025-03-10 23:50:24.326469+00:00 \n", + "7 2025-03-11 00:35:49.545878+00:00 \n", + "8 2025-03-11 00:04:28.905423+00:00 \n", + "9 2025-02-27 01:11:46.348389+00:00 \n", + "10 2025-02-12 05:00:18.389188+00:00 \n", + "11 2025-03-13 19:26:07.566190+00:00 \n", + "12 2025-03-12 20:38:23.485990+00:00 \n", + "13 2025-02-28 00:39:12.749186+00:00 \n", + "14 2025-02-24 21:09:42.956845+00:00 \n", + "15 2025-03-11 14:48:37.002285+00:00 \n", + "16 2025-02-28 00:17:11.551917+00:00 \n", + "17 2025-03-08 00:49:28.765454+00:00 \n", + "18 2025-03-12 18:53:28.438138+00:00 \n", + "19 2025-03-12 23:25:01.332171+00:00 \n", + "20 2025-03-12 23:27:46.891381+00:00 \n", + "21 2025-03-12 23:31:50.598546+00:00 \n", + "22 2025-03-30 03:28:20.234664+00:00 \n", + "23 2025-03-22 00:47:47.584219+00:00 \n", + "24 2025-03-13 19:42:52.749247+00:00 \n", + "25 2025-03-13 19:49:08.256091+00:00 \n", + "26 2025-03-14 02:10:24.215809+00:00 \n", + "27 2025-03-15 19:31:20.102295+00:00 \n", + "28 2025-03-15 20:30:15.969128+00:00 \n", + "29 2025-03-15 20:46:03.286397+00:00 \n", + "30 2025-03-15 21:16:06.451505+00:00 \n", + "31 2025-03-19 00:12:39.957853+00:00 \n", + "32 2025-03-19 00:21:46.713722+00:00 \n", + "33 2025-03-19 00:27:33.660959+00:00 \n", + "34 2025-03-19 03:01:44.286343+00:00 \n", + "35 2025-03-19 03:05:19.624623+00:00 \n", + "36 2025-03-19 13:32:25.072621+00:00 \n", + "37 2025-03-19 13:54:14.592848+00:00 \n", + "38 2025-03-22 03:32:26.587423+00:00 \n", + "39 2025-03-22 03:51:05.665674+00:00 \n", + "40 2025-03-22 20:36:19.525513+00:00 \n", + "41 2025-03-22 21:01:04.930845+00:00 \n", + "42 2025-03-22 21:14:22.184742+00:00 \n", + "43 2025-03-10 21:20:55.784131+00:00 \n", + "44 2025-03-10 20:04:35.013361+00:00 \n", + "45 2025-03-23 00:18:36.518546+00:00 \n", + "46 2025-03-16 01:32:59.594486+00:00 \n", + "47 2025-04-18 19:48:00.617056+00:00 \n", + "48 2025-04-18 19:47:24.629942+00:00 \n", + "49 2025-04-07 18:30:56.997591+00:00 \n", + "\n", + " govt_id \\\n", + "0 None \n", + "1 None \n", + "2 None \n", + "3 None \n", + "4 Onetera script.pdf \n", + "5 Hello testing file.pdf \n", + "6 None \n", + "7 None \n", + "8 Hello testing file.pdf \n", + "9 test.jpeg \n", + "10 None \n", + "11 https://saayam-virginia-private.s3.amazonaws.c... \n", + "12 https://saayam-virginia-private.s3.amazonaws.c... \n", + "13 None \n", + "14 S3://test \n", + "15 jpeg_43-2.jpg \n", + "16 None \n", + "17 govt_id_12345.pdf \n", + "18 None \n", + "19 None \n", + "20 None \n", + "21 None \n", + "22 https://saayam-virginia-private.s3.amazonaws.c... \n", + "23 None \n", + "24 None \n", + "25 None \n", + "26 None \n", + "27 None \n", + "28 None \n", + "29 None \n", + "30 None \n", + "31 None \n", + "32 None \n", + "33 None \n", + "34 None \n", + "35 None \n", + "36 None \n", + "37 None \n", + "38 None \n", + "39 None \n", + "40 None \n", + "41 None \n", + "42 None \n", + "43 https://saayam-virginia-private.s3.amazonaws.c... \n", + "44 https://saayam-virginia-private.s3.amazonaws.c... \n", + "45 https://saayam-virginia-private.s3.amazonaws.c... \n", + "46 https://saayam-virginia-private.s3.amazonaws.c... \n", + "47 None \n", + "48 https://saayam-virginia-private.s3.amazonaws.c... \n", + "49 None \n", + "\n", + " govt_id_update_date notification iscomplete \\\n", + "0 NaT None None \n", + "1 NaT None None \n", + "2 NaT None None \n", + "3 NaT None None \n", + "4 2025-03-10 23:43:12.838644+00:00 True True \n", + "5 2025-03-11 00:02:14.520940+00:00 None None \n", + "6 2025-03-11 00:03:14.492046+00:00 True True \n", + "7 NaT None None \n", + "8 2025-03-11 14:20:52.622373+00:00 None None \n", + "9 2025-02-27 01:21:48.096897+00:00 True True \n", + "10 NaT True None \n", + "11 2025-04-09 23:24:30.817375+00:00 None None \n", + "12 2025-04-09 23:25:15.203774+00:00 None None \n", + "13 NaT None None \n", + "14 2025-02-12 05:09:23.729494+00:00 True None \n", + "15 2025-03-11 14:50:03.066080+00:00 None None \n", + "16 NaT None None \n", + "17 2025-03-11 22:16:46.294619+00:00 None None \n", + "18 NaT None None \n", + "19 NaT None None \n", + "20 NaT None None \n", + "21 NaT None None \n", + "22 2025-03-31 22:30:57.273759+00:00 None None \n", + "23 NaT None None \n", + "24 NaT None None \n", + "25 NaT None None \n", + "26 NaT None None \n", + "27 NaT None None \n", + "28 NaT None None \n", + "29 NaT None None \n", + "30 NaT None None \n", + "31 NaT None None \n", + "32 NaT None None \n", + "33 NaT None None \n", + "34 NaT None None \n", + "35 NaT None None \n", + "36 NaT None None \n", + "37 NaT None None \n", + "38 NaT None None \n", + "39 NaT None None \n", + "40 NaT None None \n", + "41 NaT None None \n", + "42 NaT None None \n", + "43 2025-03-31 23:11:07.683178+00:00 None None \n", + "44 2025-04-02 19:11:17.643498+00:00 None None \n", + "45 2025-04-02 19:13:32.564293+00:00 None None \n", + "46 2025-04-02 21:14:27.023108+00:00 None None \n", + "47 NaT None None \n", + "48 2025-04-18 19:50:07.470027+00:00 None None \n", + "49 NaT None None \n", + "\n", + " completed_date \\\n", + "0 NaT \n", + "1 NaT \n", + "2 NaT \n", + "3 NaT \n", + "4 2025-03-10 23:44:01.205789+00:00 \n", + "5 NaT \n", + "6 2025-03-11 00:04:19.235933+00:00 \n", + "7 NaT \n", + "8 NaT \n", + "9 2025-02-27 01:35:40.194411+00:00 \n", + "10 2025-02-20 02:53:32.434419+00:00 \n", + "11 NaT \n", + "12 NaT \n", + "13 NaT \n", + "14 2025-02-20 01:37:03.138706+00:00 \n", + "15 NaT \n", + "16 NaT \n", + "17 NaT \n", + "18 NaT \n", + "19 NaT \n", + "20 NaT \n", + "21 NaT \n", + "22 NaT \n", + "23 NaT \n", + "24 NaT \n", + "25 NaT \n", + "26 NaT \n", + "27 NaT \n", + "28 NaT \n", + "29 NaT \n", + "30 NaT \n", + "31 NaT \n", + "32 NaT \n", + "33 NaT \n", + "34 NaT \n", + "35 NaT \n", + "36 NaT \n", + "37 NaT \n", + "38 NaT \n", + "39 NaT \n", + "40 NaT \n", + "41 NaT \n", + "42 NaT \n", + "43 NaT \n", + "44 NaT \n", + "45 NaT \n", + "46 NaT \n", + "47 NaT \n", + "48 NaT \n", + "49 NaT \n", + "\n", + " skills pii \n", + "0 None None \n", + "1 None None \n", + "2 Investing None \n", + "3 None None \n", + "4 Education, Education:University, Employment None \n", + "5 Banking, Cooking, Finance None \n", + "6 College Admissions, Cooking None \n", + "7 None None \n", + "8 Jobs, Housing None \n", + "9 Tourism, Travel, Sports, Sports:Hockey, Sports... None \n", + "10 Jobs, School, Stocks None \n", + "11 Food None \n", + "12 None None \n", + "13 Gardening, Housing, Rental, Shopping, Stocks None \n", + "14 Travel None \n", + "15 Employment None \n", + "16 School, Shopping None \n", + "17 Clothes None \n", + "18 None None \n", + "19 None None \n", + "20 None None \n", + "21 None None \n", + "22 None None \n", + "23 None None \n", + "24 None None \n", + "25 None None \n", + "26 None None \n", + "27 None None \n", + "28 None None \n", + "29 None None \n", + "30 None None \n", + "31 None None \n", + "32 None None \n", + "33 None None \n", + "34 None None \n", + "35 None None \n", + "36 None None \n", + "37 None None \n", + "38 None None \n", + "39 None None \n", + "40 None None \n", + "41 None None \n", + "42 None None \n", + "43 Jobs, Gardening None \n", + "44 None None \n", + "45 None None \n", + "46 None None \n", + "47 None None \n", + "48 sports,Banking None \n", + "49 None None " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
volunteer_detail_iduser_idterms_and_conditionsterms_and_conditions_update_dategovt_idgovt_id_update_datenotificationiscompletecompleted_dateskillspii
02002SID-00-000-000-166True2025-03-19 14:19:05.383562+00:00NoneNaTNoneNoneNaTNoneNone
12052SID-00-000-000-150True2025-03-20 23:54:34.338345+00:00NoneNaTNoneNoneNaTNoneNone
2652SID-00-000-000-004None2025-03-10 19:08:20.863791+00:00NoneNaTNoneNoneNaTInvestingNone
3752SID-00-000-000-133True2025-03-10 23:04:28.666676+00:00NoneNaTNoneNoneNaTNoneNone
4753SID-00-000-000-134True2025-03-10 23:10:19.668501+00:00Onetera script.pdf2025-03-10 23:43:12.838644+00:00TrueTrue2025-03-10 23:44:01.205789+00:00Education, Education:University, EmploymentNone
5802SID-00-000-000-158True2025-03-10 23:36:41.148424+00:00Hello testing file.pdf2025-03-11 00:02:14.520940+00:00NoneNoneNaTBanking, Cooking, FinanceNone
6754SID-00-000-000-178True2025-03-10 23:50:24.326469+00:00None2025-03-11 00:03:14.492046+00:00TrueTrue2025-03-11 00:04:19.235933+00:00College Admissions, CookingNone
7852SID-00-000-000-215True2025-03-11 00:35:49.545878+00:00NoneNaTNoneNoneNaTNoneNone
8803SID-00-000-000-152True2025-03-11 00:04:28.905423+00:00Hello testing file.pdf2025-03-11 14:20:52.622373+00:00NoneNoneNaTJobs, HousingNone
9402SID-00-000-000-009True2025-02-27 01:11:46.348389+00:00test.jpeg2025-02-27 01:21:48.096897+00:00TrueTrue2025-02-27 01:35:40.194411+00:00Tourism, Travel, Sports, Sports:Hockey, Sports...None
102SID-00-000-000-015False2025-02-12 05:00:18.389188+00:00NoneNaTTrueNone2025-02-20 02:53:32.434419+00:00Jobs, School, StocksNone
111252SID-00-000-000-231True2025-03-13 19:26:07.566190+00:00https://saayam-virginia-private.s3.amazonaws.c...2025-04-09 23:24:30.817375+00:00NoneNoneNaTFoodNone
121152SID-00-000-000-186True2025-03-12 20:38:23.485990+00:00https://saayam-virginia-private.s3.amazonaws.c...2025-04-09 23:25:15.203774+00:00NoneNoneNaTNoneNone
13502SID-00-000-000-005True2025-02-28 00:39:12.749186+00:00NoneNaTNoneNoneNaTGardening, Housing, Rental, Shopping, StocksNone
14302SID-00-000-000-106True2025-02-24 21:09:42.956845+00:00S3://test2025-02-12 05:09:23.729494+00:00TrueNone2025-02-20 01:37:03.138706+00:00TravelNone
15902SID-00-000-000-131True2025-03-11 14:48:37.002285+00:00jpeg_43-2.jpg2025-03-11 14:50:03.066080+00:00NoneNoneNaTEmploymentNone
16452SID-00-000-000-008True2025-02-28 00:17:11.551917+00:00NoneNaTNoneNoneNaTSchool, ShoppingNone
17602SID-00-000-000-195True2025-03-08 00:49:28.765454+00:00govt_id_12345.pdf2025-03-11 22:16:46.294619+00:00NoneNoneNaTClothesNone
181052SID-00-000-000-001True2025-03-12 18:53:28.438138+00:00NoneNaTNoneNoneNaTNoneNone
191202SID-00-000-000-219True2025-03-12 23:25:01.332171+00:00NoneNaTNoneNoneNaTNoneNone
201203SID-00-000-000-199True2025-03-12 23:27:46.891381+00:00NoneNaTNoneNoneNaTNoneNone
211204SID-00-000-000-003True2025-03-12 23:31:50.598546+00:00NoneNaTNoneNoneNaTNoneNone
223602SID-00-000-000-484True2025-03-30 03:28:20.234664+00:00https://saayam-virginia-private.s3.amazonaws.c...2025-03-31 22:30:57.273759+00:00NoneNoneNaTNoneNone
232102SID-00-000-000-232True2025-03-22 00:47:47.584219+00:00NoneNaTNoneNoneNaTNoneNone
241302SID-00-000-000-086True2025-03-13 19:42:52.749247+00:00NoneNaTNoneNoneNaTNoneNone
251352SID-00-000-000-127True2025-03-13 19:49:08.256091+00:00NoneNaTNoneNoneNaTNoneNone
261402SID-00-000-000-191None2025-03-14 02:10:24.215809+00:00NoneNaTNoneNoneNaTNoneNone
271452SID-00-000-000-230True2025-03-15 19:31:20.102295+00:00NoneNaTNoneNoneNaTNoneNone
281502SID-00-000-000-187True2025-03-15 20:30:15.969128+00:00NoneNaTNoneNoneNaTNoneNone
291552SID-00-000-000-174True2025-03-15 20:46:03.286397+00:00NoneNaTNoneNoneNaTNoneNone
301602SID-00-000-000-144True2025-03-15 21:16:06.451505+00:00NoneNaTNoneNoneNaTNoneNone
311702SID-00-000-000-014None2025-03-19 00:12:39.957853+00:00NoneNaTNoneNoneNaTNoneNone
321752SID-00-000-000-203True2025-03-19 00:21:46.713722+00:00NoneNaTNoneNoneNaTNoneNone
331802SID-00-000-000-170True2025-03-19 00:27:33.660959+00:00NoneNaTNoneNoneNaTNoneNone
341852SID-00-000-000-229True2025-03-19 03:01:44.286343+00:00NoneNaTNoneNoneNaTNoneNone
351853SID-00-000-000-153None2025-03-19 03:05:19.624623+00:00NoneNaTNoneNoneNaTNoneNone
361902SID-00-000-000-157True2025-03-19 13:32:25.072621+00:00NoneNaTNoneNoneNaTNoneNone
371952SID-00-000-000-227True2025-03-19 13:54:14.592848+00:00NoneNaTNoneNoneNaTNoneNone
382152SID-00-000-000-132True2025-03-22 03:32:26.587423+00:00NoneNaTNoneNoneNaTNoneNone
392202SID-00-000-000-257True2025-03-22 03:51:05.665674+00:00NoneNaTNoneNoneNaTNoneNone
402252SID-00-000-000-336True2025-03-22 20:36:19.525513+00:00NoneNaTNoneNoneNaTNoneNone
412302SID-00-000-000-353True2025-03-22 21:01:04.930845+00:00NoneNaTNoneNoneNaTNoneNone
422352SID-00-000-000-269True2025-03-22 21:14:22.184742+00:00NoneNaTNoneNoneNaTNoneNone
43653SID-00-000-000-102True2025-03-10 21:20:55.784131+00:00https://saayam-virginia-private.s3.amazonaws.c...2025-03-31 23:11:07.683178+00:00NoneNoneNaTJobs, GardeningNone
44702SID-00-000-000-013True2025-03-10 20:04:35.013361+00:00https://saayam-virginia-private.s3.amazonaws.c...2025-04-02 19:11:17.643498+00:00NoneNoneNaTNoneNone
452452SID-00-000-000-237True2025-03-23 00:18:36.518546+00:00https://saayam-virginia-private.s3.amazonaws.c...2025-04-02 19:13:32.564293+00:00NoneNoneNaTNoneNone
461652SID-00-000-000-010True2025-03-16 01:32:59.594486+00:00https://saayam-virginia-private.s3.amazonaws.c...2025-04-02 21:14:27.023108+00:00NoneNoneNaTNoneNone
473802SID-00-000-000-143True2025-04-18 19:48:00.617056+00:00NoneNaTNoneNoneNaTNoneNone
482402SID-00-000-000-242True2025-04-18 19:47:24.629942+00:00https://saayam-virginia-private.s3.amazonaws.c...2025-04-18 19:50:07.470027+00:00NoneNoneNaTsports,BankingNone
493752SID-00-000-000-138True2025-04-07 18:30:56.997591+00:00NoneNaTNoneNoneNaTNoneNone
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "repr_error": "Out of range float values are not JSON compliant: nan" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "๐Ÿ“Œ Preview of table: saayam_users\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":19: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", + " display(pd.read_sql(f\"SELECT * FROM {table};\", conn))\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " user_id user_email user_phone \\\n", + "0 SID-00-000-000-001 naveenchowdary401@gmail.com +19174989576 \n", + "1 SID-00-000-000-002 kandrumounikapreethi@gmail.com +16028497472 \n", + "2 SID-00-000-000-003 shilpaprabhakar10@gmail.com +14155797509 \n", + "3 SID-00-000-000-004 barotmadhuri6275@gmail.com +18408771089 \n", + "4 SID-00-000-000-005 zuewman@gmail.com +972533653416 \n", + "5 SID-00-000-000-006 haardrao23@gmail.com +13134782312 \n", + "6 SID-00-000-000-007 vighnesh.s.saayam@gmail.com +14087265003 \n", + "7 SID-00-000-000-008 shashikirandevadiga1995@gmail.com +14252696548 \n", + "8 SID-00-000-000-009 likhithhalkurke98@gmail.com +17202515128 \n", + "9 SID-00-000-000-010 shobha.s.kamath@gmail.com +971504380139 \n", + "10 SID-00-000-000-011 riyacmu@gmail.com +18572101010 \n", + "11 SID-00-000-000-012 ns.bharanimeena@gmail.com +14088392593 \n", + "12 SID-00-000-000-013 bommakantikavyasree56@gmail.com +13305540698 \n", + "13 SID-00-000-000-014 stephen.gair@gmail.com +440787021334 \n", + "14 SID-00-000-000-015 madhukarcg@gmail.com +14086911896 \n", + "15 SID-00-000-000-016 prashantkumaromar@gmail.com +17164864876 \n", + "16 SID-00-000-000-017 ranimuma@gmail.com +17324870397 \n", + "17 SID-00-000-000-018 prashantomar1651@gmail.com +17164864876 \n", + "18 SID-00-000-000-019 wagharyan99@gmail.com +19514109127 \n", + "\n", + " user_name country \n", + "0 Naveen peddi United States \n", + "1 Mounika kandru United States \n", + "2 Shilpa Prabhakar United States \n", + "3 Madhuri Barot United States \n", + "4 Leo Zuewman Israel \n", + "5 Haard Rao United States \n", + "6 Vighnesh Sridhar United States \n", + "7 Shashikiran Devadiga United States \n", + "8 Likhith H G United States \n", + "9 shobha kamath United Arab Emirates \n", + "10 Riya U United States \n", + "11 Meena Bharani United States \n", + "12 Kavyasree Bommakanti United States \n", + "13 Stephen Gair United Kingdom \n", + "14 Madhukar Govindaraju United States \n", + "15 Prashant Kumar United States \n", + "16 Uma Molleti United States \n", + "17 Prashant Kumar United States \n", + "18 Aryan Wagh United States " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
user_iduser_emailuser_phoneuser_namecountry
0SID-00-000-000-001naveenchowdary401@gmail.com+19174989576Naveen peddiUnited States
1SID-00-000-000-002kandrumounikapreethi@gmail.com+16028497472Mounika kandruUnited States
2SID-00-000-000-003shilpaprabhakar10@gmail.com+14155797509Shilpa PrabhakarUnited States
3SID-00-000-000-004barotmadhuri6275@gmail.com+18408771089Madhuri BarotUnited States
4SID-00-000-000-005zuewman@gmail.com+972533653416Leo ZuewmanIsrael
5SID-00-000-000-006haardrao23@gmail.com+13134782312Haard RaoUnited States
6SID-00-000-000-007vighnesh.s.saayam@gmail.com+14087265003Vighnesh SridharUnited States
7SID-00-000-000-008shashikirandevadiga1995@gmail.com+14252696548Shashikiran DevadigaUnited States
8SID-00-000-000-009likhithhalkurke98@gmail.com+17202515128Likhith H GUnited States
9SID-00-000-000-010shobha.s.kamath@gmail.com+971504380139shobha kamathUnited Arab Emirates
10SID-00-000-000-011riyacmu@gmail.com+18572101010Riya UUnited States
11SID-00-000-000-012ns.bharanimeena@gmail.com+14088392593Meena BharaniUnited States
12SID-00-000-000-013bommakantikavyasree56@gmail.com+13305540698Kavyasree BommakantiUnited States
13SID-00-000-000-014stephen.gair@gmail.com+440787021334Stephen GairUnited Kingdom
14SID-00-000-000-015madhukarcg@gmail.com+14086911896Madhukar GovindarajuUnited States
15SID-00-000-000-016prashantkumaromar@gmail.com+17164864876Prashant KumarUnited States
16SID-00-000-000-017ranimuma@gmail.com+17324870397Uma MolletiUnited States
17SID-00-000-000-018prashantomar1651@gmail.com+17164864876Prashant KumarUnited States
18SID-00-000-000-019wagharyan99@gmail.com+19514109127Aryan WaghUnited States
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \" display(pd\",\n \"rows\": 19,\n \"fields\": [\n {\n \"column\": \"user_id\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 19,\n \"samples\": [\n \"SID-00-000-000-001\",\n \"SID-00-000-000-006\",\n \"SID-00-000-000-012\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"user_email\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 19,\n \"samples\": [\n \"naveenchowdary401@gmail.com\",\n \"haardrao23@gmail.com\",\n \"ns.bharanimeena@gmail.com\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"user_phone\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 18,\n \"samples\": [\n \"+19174989576\",\n \"+16028497472\",\n \"+17202515128\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"user_name\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 18,\n \"samples\": [\n \"Naveen peddi\",\n \"Mounika kandru\",\n \"Likhith H G\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"country\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"Israel\",\n \"United Kingdom\",\n \"United States\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "๐Ÿ“Œ Preview of table: ngos\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":19: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", + " display(pd.read_sql(f\"SELECT * FROM {table};\", conn))\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Empty DataFrame\n", + "Columns: [ngo_id, country_id, ngo_name, website, email, phone]\n", + "Index: []" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ngo_idcountry_idngo_namewebsiteemailphone
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "repr_error": "Out of range float values are not JSON compliant: nan" + } + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "# 1. Count of Users by Category\n", + "query = \"\"\"\n", + "SELECT uc.user_category, COUNT(u.user_id) AS total_users\n", + "FROM user_category uc\n", + "LEFT JOIN users u ON u.user_category_id = uc.user_category_id\n", + "GROUP BY uc.user_category\n", + "ORDER BY total_users DESC;\n", + "\"\"\"\n", + "pd.read_sql(query, conn)\n", + "\n", + "\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 178 + }, + "id": "zk4ULu95-Tgw", + "outputId": "07c87f5e-de51-46ef-9c23-a52b4826fd23" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":9: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", + " pd.read_sql(query, conn)\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " user_category total_users\n", + "0 MEMBER 118\n", + "1 DONOR 0\n", + "2 VOLUNTEER 0" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
user_categorytotal_users
0MEMBER118
1DONOR0
2VOLUNTEER0
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"pd\",\n \"rows\": 3,\n \"fields\": [\n {\n \"column\": \"user_category\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 3,\n \"samples\": [\n \"MEMBER\",\n \"DONOR\",\n \"VOLUNTEER\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"total_users\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 68,\n \"min\": 0,\n \"max\": 118,\n \"num_unique_values\": 2,\n \"samples\": [\n 0,\n 118\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 107 + } + ] + }, + { + "cell_type": "code", + "source": [ + "# 2. Geographic Distribution of Users\n", + "run_query(\"2. Geographic Distribution\", \"\"\"\n", + " SELECT\n", + " c.country_name AS country,\n", + " s.state_name AS state,\n", + " COUNT(u.user_id) AS total_requests\n", + " FROM users u\n", + " JOIN country c ON u.country_id = c.country_id\n", + " JOIN state s ON u.state_id = s.state_id\n", + " GROUP BY c.country_name, s.state_name\n", + " ORDER BY total_requests DESC;\n", + "\"\"\")\n", + "\n", + "\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 122 + }, + "id": "BAQH5hN9-lg2", + "outputId": "e2c7e98f-cc21-4a4a-bc2a-0dc139853635" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "๐Ÿ“Š 2. Geographic Distribution\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":5: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", + " df = pd.read_sql(query, conn)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Empty DataFrame\n", + "Columns: [country, state, total_requests]\n", + "Index: []" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countrystatetotal_requests
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "repr_error": "Out of range float values are not JSON compliant: nan" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "------------------------------------------------------------\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# 3. Number of Volunteers\n", + "query = \"\"\"\n", + "SELECT COUNT(DISTINCT user_id) AS total_volunteers\n", + "FROM volunteer_details;\n", + "\"\"\"\n", + "pd.read_sql(query, conn)\n", + "\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 115 + }, + "id": "FYr1uO1N-mHZ", + "outputId": "a6d0377c-3df4-40d3-f9c8-8760a00d5637" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":6: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", + " pd.read_sql(query, conn)\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " total_volunteers\n", + "0 50" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
total_volunteers
050
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"pd\",\n \"rows\": 1,\n \"fields\": [\n {\n \"column\": \"total_volunteers\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": null,\n \"min\": 50,\n \"max\": 50,\n \"num_unique_values\": 1,\n \"samples\": [\n 50\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 39 + } + ] + }, + { + "cell_type": "code", + "source": [ + "# 4. Volunteer Status Summary\n", + "run_query(\"4. Volunteer Status Summary\", \"\"\"\n", + " SELECT\n", + " COALESCE(us.user_status, 'Unknown') AS status,\n", + " COUNT(DISTINCT vd.user_id) AS total_volunteers\n", + "FROM volunteer_details vd\n", + "LEFT JOIN users u ON vd.user_id = u.user_id\n", + "LEFT JOIN user_status us ON u.user_status_id = us.user_status_id\n", + "GROUP BY us.user_status;\n", + "\n", + "\"\"\")\n", + "\n", + "\n", + "\n", + "\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 150 + }, + "id": "NgZwhiJJ-mL0", + "outputId": "afdb73a0-3636-4a6c-9b5e-1df49eb8ff61" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "๐Ÿ“Š 4. Volunteer Status Summary\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":5: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", + " df = pd.read_sql(query, conn)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " status total_volunteers\n", + "0 ACTIVE 50" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
statustotal_volunteers
0ACTIVE50
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"\\\"\\\"\\\")\",\n \"rows\": 1,\n \"fields\": [\n {\n \"column\": \"status\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 1,\n \"samples\": [\n \"ACTIVE\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"total_volunteers\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": null,\n \"min\": 50,\n \"max\": 50,\n \"num_unique_values\": 1,\n \"samples\": [\n 50\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "------------------------------------------------------------\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# 5. Skills Breakdown\n", + "run_query(\"5. Skills Breakdown from volunteer_details\", \"\"\"\n", + " SELECT\n", + " TRIM(UNNEST(STRING_TO_ARRAY(skills, ','))) AS skill,\n", + " COUNT(*) AS total_volunteers\n", + " FROM volunteer_details\n", + " WHERE skills IS NOT NULL\n", + " GROUP BY skill\n", + " ORDER BY total_volunteers DESC;\n", + "\"\"\")\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 840 + }, + "id": "66CbApzE-mOs", + "outputId": "8ee8a97a-7731-4b37-a6fd-9075f567faeb" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "๐Ÿ“Š 5. Skills Breakdown from volunteer_details\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":5: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", + " df = pd.read_sql(query, conn)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " skill total_volunteers\n", + "0 Jobs 3\n", + "1 Banking 2\n", + "2 Cooking 2\n", + "3 Housing 2\n", + "4 Travel 2\n", + "5 Gardening 2\n", + "6 Shopping 2\n", + "7 Stocks 2\n", + "8 Employment 2\n", + "9 School 2\n", + "10 Finance 1\n", + "11 Investing 1\n", + "12 sports 1\n", + "13 Food 1\n", + "14 Rental 1\n", + "15 Sports:Jogging 1\n", + "16 Education 1\n", + "17 Clothes 1\n", + "18 Education:University 1\n", + "19 Sports 1\n", + "20 Tourism 1\n", + "21 College Admissions 1\n", + "22 Sports:Hockey 1" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
skilltotal_volunteers
0Jobs3
1Banking2
2Cooking2
3Housing2
4Travel2
5Gardening2
6Shopping2
7Stocks2
8Employment2
9School2
10Finance1
11Investing1
12sports1
13Food1
14Rental1
15Sports:Jogging1
16Education1
17Clothes1
18Education:University1
19Sports1
20Tourism1
21College Admissions1
22Sports:Hockey1
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"\\\"\\\"\\\")\",\n \"rows\": 23,\n \"fields\": [\n {\n \"column\": \"skill\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 23,\n \"samples\": [\n \"Sports:Jogging\",\n \"School\",\n \"Jobs\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"total_volunteers\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 1,\n \"max\": 3,\n \"num_unique_values\": 3,\n \"samples\": [\n 3,\n 2,\n 1\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "------------------------------------------------------------\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# 6. Country-Wise Volunteer Count (Optional - from saayam_users)\n", + "run_query(\"6. Country-wise User Count from saayam_users\", \"\"\"\n", + " SELECT\n", + " country,\n", + " COUNT(user_id) AS total_users\n", + " FROM saayam_users\n", + " GROUP BY country\n", + " ORDER BY total_users DESC;\n", + "\"\"\")\n", + "\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 244 + }, + "id": "R4CMCqZ1-mRj", + "outputId": "96141554-37c6-47fd-8066-4d13f383e835" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "๐Ÿ“Š 6. Country-wise User Count from saayam_users\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":5: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", + " df = pd.read_sql(query, conn)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " country total_users\n", + "0 United States 16\n", + "1 United Kingdom 1\n", + "2 Israel 1\n", + "3 United Arab Emirates 1" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countrytotal_users
0United States16
1United Kingdom1
2Israel1
3United Arab Emirates1
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"\\\"\\\"\\\")\",\n \"rows\": 4,\n \"fields\": [\n {\n \"column\": \"country\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"United Kingdom\",\n \"United Arab Emirates\",\n \"United States\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"total_users\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7,\n \"min\": 1,\n \"max\": 16,\n \"num_unique_values\": 2,\n \"samples\": [\n 1,\n 16\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "------------------------------------------------------------\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# 7. Emergency Contact Info Coverage\n", + "run_query(\"7. Emergency Contact Coverage\", \"\"\"\n", + " SELECT\n", + " COUNT(user_id) AS users_with_emergency_contacts\n", + "FROM user_additional_details\n", + "WHERE\n", + " secondary_email_1 IS NOT NULL OR\n", + " secondary_email_2 IS NOT NULL OR\n", + " secondary_phone_1 IS NOT NULL OR\n", + " secondary_phone_2 IS NOT NULL;\n", + "\n", + "\"\"\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 150 + }, + "id": "NVbOU4-5-mT4", + "outputId": "d0ccebca-2eef-4f00-dda9-088fbbe6134e" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "๐Ÿ“Š 7. Emergency Contact Coverage\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":5: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", + " df = pd.read_sql(query, conn)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + " users_with_emergency_contacts\n", + "0 0" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
users_with_emergency_contacts
00
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "summary": "{\n \"name\": \"\\\"\\\"\\\")\",\n \"rows\": 1,\n \"fields\": [\n {\n \"column\": \"users_with_emergency_contacts\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": null,\n \"min\": 0,\n \"max\": 0,\n \"num_unique_values\": 1,\n \"samples\": [\n 0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "------------------------------------------------------------\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# **Visualizations**" + ], + "metadata": { + "id": "RhpNZzz-srLO" + } + }, + { + "cell_type": "markdown", + "source": [ + "# **Compare Total Users vs Volunteers**" + ], + "metadata": { + "id": "U5Xo2vmauXvs" + } + }, + { + "cell_type": "code", + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# Extract values from actual DataFrame\n", + "member_count = df_user_categories[df_user_categories['user_category'] == 'MEMBER']['total_users'].values[0]\n", + "volunteer_count = df_volunteers['total_volunteers'].values[0]\n", + "\n", + "# Prepare data\n", + "categories = ['Members', 'Volunteers']\n", + "counts = [member_count, volunteer_count]\n", + "\n", + "# Plot\n", + "plt.figure(figsize=(6, 4))\n", + "bars = plt.bar(categories, counts, color=['steelblue', 'orange'])\n", + "plt.title('Comparison of Registered Members and Active Volunteers')\n", + "plt.ylabel('Number of Users')\n", + "plt.grid(axis='y', linestyle='--', alpha=0.5)\n", + "\n", + "# Add count labels above bars\n", + "for bar in bars:\n", + " height = bar.get_height()\n", + " plt.text(bar.get_x() + bar.get_width()/2.0, height + 2, f'{int(height)}',\n", + " ha='center', va='bottom', fontsize=10, fontweight='bold')\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 407 + }, + "id": "hGtt8l2krzyd", + "outputId": "32911513-7c00-436d-eef8-1eab1a776fd1" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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pKamwt7eHsOHD5djGRkZGD9+PIKDg6HT6eDv74+RI0c+tM4GDRogICAAK1asMJqWlZWF1atX46WXXoKvry8AYNeuXWjUqBEcHR3h6uqK9u3b4/Tp0w99/cxtuwpuM3LPj9q3bx+GDRsGT09PODo64tVXX8WNGzcUzzt16hR+/vln+XVs2rSpPF3tem+Nbcz27dvRsGFDuLq6wsnJCRUrVpTXgydCkFWUKVNGlC9fXvX46OhoAUB07NhRzJ07V3Tv3l0AEB06dFCMK1eunKhYsaLw8fEREyZMEDNnzhRlypQRTk5O4ptvvhFly5YVH330kfjoo4+Ei4uLCA4OFnq9XrEce3t7UaFCBfHWW2+Jzz77TLRp00YAEGPHjlUsy8/PT/Tv31989tlnYsaMGeLFF18UAMTGjRsV4wCISpUqCU9PTxETEyPmzp0rjh07Jk8bP368PLZr167Czs5ODBs2THzxxRdi6tSpom3btuKbb76RxyxZskQAEC+88IKYOXOmGD16tHBwcBABAQEiKSnJqJbKlSuLXr16ifnz54uoqCgBQMybN++hr/n48eMFABERESHmzJkjBg4cKLRarXjhhRdEZmamEEKIdevWiVdffVUAEPPnzxdff/21OHHixEPneePGDUV8+PDhAoDYsmWLHNu5c6ews7MT9erVE9OnTxczZ84U1apVE3Z2duLgwYPyuKNHjwqdTicCAgLERx99JD788EPh6+srqlevLgqusuXKlRPR0dHy4/fff19IkiT69OkjPv/8czF9+nTxxhtviI8++kgIIcT+/ftFixYtBADx9ddfy/9yvf3228LGxkb06dNHLFiwQIwaNUo4OjoqXqPc5QYHBws3NzcxevRosWDBArF7926Rnp4uqlWrJkqVKiXef/99sWDBAtG9e3chSZIYPHiw/HyDwSAaN24sNBqN6N+/v5gzZ45o1qyZqFatmgAglixZ8sC/5e7duwUAsWrVKtG1a1fRqFEjedrx48cFAHHgwAHRpEkTUblyZcVzJ0+eLCRJEp07dxbz5s0TMTExwsPDw+j91qRJE+Hr6yv8/f3FiBEjxJw5c0RYWJjQarVi5cqVonTp0mLChAli1qxZokyZMsLFxUWkpqbKz899b1StWlW0bdtWfPbZZ+LNN98UAMRbb731yDmVLl1aeHp6infffVcsXLhQrF+/Xly7dk24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OHr0KDZu3Ai9Xi/v7nN3d4ednR0qVaqEli1bok+fPliwYAGysrIwcOBAdOnSRfUVdURERERqFemhuj179uCll14yikdHR2PChAkIDAw0+bzdu3ej6b83ILx9+zYGDhyIDRs2QKPRICoqCrNnz5bPVVKDtyMgIiJ6flnSBxSbc5yKUmE3TpGTNll9nkTPi21jWxd1CkT0jHtm7+NEREREVJTYOBERERGpxMaJiIiISCU2TkREREQqsXEiIiIiUomNExEREZFKbJyIiIiIVGLjRERERKQSGyciIiIildg4EREREanExomIiIhIJTZORERERCqxcSIiIiJSiY0TERERkUpsnIiIiIhUYuNEREREpBIbJyIiIiKV2DgRERERqcTGiYiIiEglNk5EREREKrFxIiIiIlKJjRMRERGRSmyciIiIiFRi40RERESkEhsnIiIiIpXYOBERERGpxMaJiIiISCU2TkREREQqsXEiIiIiUomNExEREZFKbJyIiIiIVGLjRERERKQSGyciIiIildg4EREREanExomIiIhIJTZORERERCqxcSIiIiJSiY0TERERkUpsnIiIiIhUYuNEREREpBIbJyIiIiKVirRx2rt3L9q2bQtfX19IkoT169crpgshMG7cOPj4+MDBwQERERGIjY1VjLl9+za6desGZ2dnuLq6onfv3khLS3uCVRAREdHzokgbp/T0dFSvXh1z5841OX3atGmYPXs2FixYgIMHD8LR0RGRkZG4f/++PKZbt244deoUtm/fjo0bN2Lv3r3o27fvkyqBiIiIniM2RbnwVq1aoVWrVianCSEwa9YsfPDBB2jfvj0A4KuvvoK3tzfWr1+PLl264PTp09i6dSsOHz6M2rVrAwDmzJmDV155BZ988gl8fX2fWC1ERET07Cu25zjFx8cjMTERERERcszFxQV16tTBgQMHAAAHDhyAq6ur3DQBQEREBDQaDQ4ePPjEcyYiIqJnW5HucXqQxMREAIC3t7ci7u3tLU9LTEyEl5eXYrqNjQ3c3d3lMaZkZGQgIyNDfpyamgoA0Ov10Ov1AABJkqDRaGAwGCCEkMeai2s0GkiSZDIOABopLwYAhn8faiSojEsAhMm4BAFJTVwABkjQQAD54kIAApJRjubiOTmai7Mm1mTdmnLXSSBvPcsfy40DgMFgUBXXarUQQijiueu2ubja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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Volunteer Skills Breakdown by **Popularity**" + ], + "metadata": { + "id": "Libaeu-vK0TL" + } + }, + { + "cell_type": "code", + "source": [ + "# Step 1: Run the query again and save to df_skills\n", + "query = \"\"\"\n", + "SELECT\n", + " TRIM(UNNEST(STRING_TO_ARRAY(skills, ','))) AS skill,\n", + " COUNT(*) AS total_volunteers\n", + "FROM volunteer_details\n", + "WHERE skills IS NOT NULL\n", + "GROUP BY skill\n", + "ORDER BY total_volunteers DESC;\n", + "\"\"\"\n", + "df_skills = pd.read_sql(query, conn)\n", + "\n", + "# Step 2: Strip any extra spaces from column names\n", + "df_skills.columns = df_skills.columns.str.strip()\n", + "\n", + "# Step 3: Sort the skills for a better-looking chart\n", + "df_skills_sorted = df_skills.sort_values(by='total_volunteers', ascending=True)\n", + "\n", + "# Step 4: Plot the horizontal bar chart\n", + "import matplotlib.pyplot as plt\n", + "\n", + "plt.figure(figsize=(8, 6))\n", + "bars = plt.barh(df_skills_sorted['skill'], df_skills_sorted['total_volunteers'], color='mediumseagreen')\n", + "plt.title('Volunteer Skills Distribution')\n", + "plt.xlabel('Number of Volunteers')\n", + "plt.ylabel('Skill')\n", + "plt.grid(axis='x', linestyle='--', alpha=0.5)\n", + "\n", + "# Add labels next to bars\n", + "for bar in bars:\n", + " width = bar.get_width()\n", + " plt.text(width + 0.1, bar.get_y() + bar.get_height()/2,\n", + " str(int(width)), va='center', fontsize=9)\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 642 + }, + "id": "b-sPkzpGIzPN", + "outputId": "d927ac1f-ff34-4e98-8296-7f63ddc19141" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + ":11: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.\n", + " df_skills = pd.read_sql(query, conn)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAJOCAYAAAAqFJGJAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA25FJREFUeJzs3XlcVOX////HGZBFVndQEZRNUNHMNUqlVNTcNdOPmVSa5dbiUlTmkmaau6b2thQtzTZzq1zLUjTRDLVERHPNLRcgXBBmzu8Pv8yvCVSQYa5xfN1vt3O7OWeuc51rnoKea851XUfTdV1HCCGEEEIIIYrBoLoBQgghhBBCiHufdCyEEEIIIYQQxSYdCyGEEEIIIUSxScdCCCGEEEIIUWzSsRBCCCGEEEIUm3QshBBCCCGEEMUmHQshhBBCCCFEsUnHQgghhBBCCFFs0rEQQgghhBBCFJt0LIQQQgBw7NgxNE0jISFBdVPuCZqmMXjw4NuWKSjTMWPGoGmaRbmgoCDi4uJKoJV3lpCQgKZpHDt2rMTPFRcXR1BQkPl1Xj5Tpkwp8XNDwdkLIaxHOhZCCHEP6tixI6VLl+aff/65ZZnevXvj4uLCxYsXbdiyO/vuu+8YM2aM6mbc0v79++nevTuBgYG4ublRpUoVWrVqxezZs1U37Y62bNmCpmnmzdXVlUqVKtGiRQveffdd/v77b6uc5+rVq4wZM4YtW7ZYpT5rsue2CeHopGMhhBD3oN69e3Pt2jW++eabAt+/evUqq1atok2bNpQrV87Grbu97777jrFjx6puRoG2b99OgwYN2Lt3L/3792fOnDn069cPg8HAzJkzi1xfYGAg165do0+fPiXQ2lsbOnQon3zyCf/73/8YMWIEZcuWZfTo0URERPDDDz9YlO3Tpw/Xrl0jMDCw0PVfvXqVsWPHFvnifcGCBaSmphbpmKK6Xdveeustrl27VqLnF+J+5qy6AUIIIYquY8eOeHl5sWzZMp5++ul8769atYorV67Qu3dvBa2zb1euXMHDw6PA9yZMmICPjw+7du3C19fX4r3z588X+VyapuHm5nY3zSyWRx55hO7du1vs27t3L61bt6Zbt24cOHAAf39/AJycnHBycirR9uRlXqpUqRI9z504Ozvj7CyXPkKUFLljIYQQ9yB3d3e6du3K5s2bC7zgXbZsGV5eXnTs2BGAP//8kyeeeIKyZctSunRpmjRpwrfffnvH87Ro0YIWLVrk23+7sfL/+9//CA4OxtXVlYYNG7Jr1y6L4z744AMAiyE7eUwmEzNmzKBWrVq4ublRqVIlBgwYwOXLl/O14fvvv+eRRx7Bw8MDLy8vHn/8cf7444987fT09OTIkSO0a9cOLy+v23a2jhw5Qq1atfJ1KgAqVqx4y+PyjB8/HoPBYB42dbfzVnJychg7diyhoaG4ublRrlw5Hn74YTZu3Fikev6tbt26zJgxg/T0dObMmWPeX9Aci927dxMbG0v58uVxd3enevXqPPvss+bPVKFCBQDGjh1r/jvMG952u8z/+3Pzb9OnTycwMBB3d3eaN2/O77//bvF+YX4W79S2guZY5Obm8s4775h/ZoOCgnjjjTfIzs62KBcUFET79u3Ztm0bjRo1ws3NjRo1arBkyZKCAxfiPiQdCyGEuEf17t2b3NxcvvjiC4v9ly5dYv369XTp0gV3d3fOnTvHQw89xPr16xk4cCATJkzg+vXrdOzY8ZZDqe7WsmXLeP/99xkwYADjx4/n2LFjdO3alZycHAAGDBhAq1atAPjkk0/MW54BAwYwYsQIoqOjmTlzJs888wxLly4lNjbWXEfesY8//jienp5MmjSJUaNGceDAAR5++OF8k5Bzc3OJjY2lYsWKTJkyhW7dut2y/YGBgfz666/5LmoL46233uLtt9/mww8/ZMiQIUU+/t/GjBnD2LFjiYmJYc6cObz55ptUq1aNPXv2FKve7t274+7uzoYNG25Z5vz587Ru3Zpjx47x+uuvM3v2bHr37s0vv/wCQIUKFZg3bx4AXbp0Mf8ddu3a1VxHUTIHWLJkCbNmzWLQoEHEx8fz+++/8+ijj3Lu3Lkifb7CtO2/+vXrx9tvv039+vWZPn06zZs3Z+LEifTs2TNf2cOHD9O9e3datWrF1KlTKVOmDHFxcfk6tELct3QhhBD3pNzcXN3f319v2rSpxf758+frgL5+/Xpd13X95Zdf1gF969at5jL//POPXr16dT0oKEg3Go26ruv60aNHdUBftGiRuVzz5s315s2b5zt337599cDAQPPrvGPLlSunX7p0ybx/1apVOqCvWbPGvG/QoEF6Qf/9bN26VQf0pUuXWuxft26dxf5//vlH9/X11fv3729R7uzZs7qPj4/F/r59++qA/vrrr+c7X0E2bNigOzk56U5OTnrTpk31kSNH6uvXr9dv3LiRryygDxo0SNd1XR82bJhuMBj0hIQEizIFZTp69Oh8nz8wMFDv27ev+XXdunX1xx9/vFBt/rcff/xRB/Qvv/zylmXq1q2rlylTxvx60aJFOqAfPXpU13Vd/+abb3RA37Vr1y3r+Pvvv3VAHz16dL73bpf5rX5u3N3d9VOnTpn379y5Uwf0V155xbyvsD+Lt2vbf7NPTk7WAb1fv34W5YYPH64D+g8//GDeFxgYqAP6zz//bN53/vx53dXVVR82bFi+cwlxP5I7FkIIcY9ycnKiZ8+e7Nixw+Jb+mXLllGpUiUee+wx4OZk6UaNGvHwww+by3h6evL8889z7NgxDhw4YLU2Pfnkk5QpU8b8+pFHHgFuDsW6ky+//BIfHx9atWrFhQsXzNuDDz6Ip6cnP/74IwAbN24kPT2dXr16WZRzcnKicePG5nL/9uKLLxaq/a1atWLHjh107NiRvXv3MnnyZGJjY6lSpQqrV6/OV17XdQYPHszMmTP59NNP6du3b6HOcye+vr788ccfpKWlWaW+f/P09LztamJ5w8DWrl1rcZeoqAqbOUDnzp2pUqWK+XWjRo1o3Lgx33333V2fvzDy6n/11Vct9g8bNgwg33DByMhI88803LxDEh4eXqifbyHuB9KxEEKIe1je2PVly5YBcOrUKbZu3UrPnj3NE3KPHz9OeHh4vmMjIiLM71tLtWrVLF7ndTIKmiPxX2lpaWRkZFCxYkUqVKhgsWVlZZnnkuRdbD/66KP5ym3YsCHfnBNnZ2eqVq1a6M/QsGFDVqxYweXLl0lKSiI+Pp5//vmH7t275+uELVmyhA8++IDZs2fTq1evQp/jTsaNG0d6ejphYWHUqVOHESNGsG/fPqvUnZWVhZeX1y3fb968Od26dWPs2LGUL1+eTp06sWjRonxzDm6nqJmHhobm2xcWFlbiz9Y4fvw4BoOBkJAQi/1+fn74+vrm+93478833PwZL8zPtxD3A1kaQQgh7mEPPvggNWvW5LPPPuONN97gs88+Q9d1q60GpWkauq7n2280Ggssf6vVhQqq479MJhMVK1Zk6dKlBb6fNynXZDIBN+dZ+Pn55Sv331V/XF1dMRiK/j2ai4sLDRs2pGHDhoSFhfHMM8/w5ZdfMnr0aHOZ6OhokpOTmTNnDj169KBs2bJFPk9BmjVrxpEjR1i1ahUbNmzgo48+Yvr06cyfP59+/frddb05OTkcOnSI2rVr37KMpml89dVX/PLLL6xZs4b169fz7LPPMnXqVH755Rc8PT3veJ67zfx2ivqzWNS6C6M4P99C3A+kYyGEEPe43r17M2rUKPbt28eyZcsIDQ2lYcOG5vcDAwMLfHbAwYMHze/fSpkyZQoc5lGcuxy3uogLDg5m06ZNREdH4+7ufsvjg4ODgZurNLVs2fKu21EUDRo0AODMmTMW+0NCQpg8eTItWrSgTZs2bN68+bZ3A4qibNmyPPPMMzzzzDNkZWXRrFkzxowZU6yOxVdffcW1a9eIjY29Y9kmTZrQpEkTJkyYwLJly+jduzfLly+nX79+Vn96dUFDvg4dOmSxglRhfxaL0rbAwEBMJhNpaWnmO3gA586dIz09vUjP9hBCyFAoIYS45+XdnXj77bdJTk7Od7eiXbt2JCUlsWPHDvO+K1eu8L///Y+goCAiIyNvWXdwcDAHDx60eGLz3r17SUxMvOv25j1DIj093WJ/jx49MBqNvPPOO/mOyc3NNZePjY3F29ubd999t8A5AMV5uvSPP/5Y4LfPeWPxCxpSFhUVxXfffUdKSgodOnSwygPY/vu0dE9PT0JCQoo0HOm/9u7dy8svv0yZMmUYNGjQLctdvnw5Xwb16tUDMJ+/dOnSQP6/w7u1cuVK/vrrL/PrpKQkdu7cSdu2bc37CvuzWJS2tWvXDoAZM2ZY7J82bRoAjz/+eJE+hxD3O7ljIYQQ97jq1avz0EMPsWrVKoB8HYvXX3+dzz77jLZt2zJ06FDKli3L4sWLOXr0KF9//fVth6w8++yzTJs2jdjYWJ577jnOnz/P/PnzqVWrFpmZmXfV3gcffBC4+XTo2NhY8yT05s2bM2DAACZOnEhycjKtW7emVKlSpKWl8eWXXzJz5ky6d++Ot7c38+bNo0+fPtSvX5+ePXtSoUIFTpw4wbfffkt0dLTFcxqKYsiQIVy9epUuXbpQs2ZNbty4wfbt2/n8888JCgrimWeeKfC4Jk2asGrVKtq1a0f37t1ZuXJlsR4GFxkZSYsWLXjwwQcpW7Ysu3fv5quvvmLw4MGFOn7r1q1cv34do9HIxYsXSUxMZPXq1fj4+PDNN98UOIQsz+LFi5k7dy5dunQhODiYf/75hwULFuDt7W2+EHd3dycyMpLPP/+csLAwypYtS+3atW87xOp2QkJCePjhh3nxxRfJzs5mxowZlCtXjpEjR5rLFPZnsShtq1u3Ln379uV///sf6enpNG/enKSkJBYvXkznzp2JiYm5q88jxH1L3YJUQgghrOWDDz7QAb1Ro0YFvn/kyBG9e/fuuq+vr+7m5qY3atRIX7t2rUWZgpZG1XVd//TTT/UaNWroLi4uer169fT169ffctnQ999/P9+5+c/Sn7m5ufqQIUP0ChUq6Jqm5Vt69X//+5/+4IMP6u7u7rqXl5dep04dfeTIkfrp06ctyv344496bGys7uPjo7u5uenBwcF6XFycvnv3bnOZvn376h4eHreLzsL333+vP/vss3rNmjV1T09P3cXFRQ8JCdGHDBminzt3Lt/nyltuNs+qVat0Z2dn/cknn9SNRuNdLzc7fvx4vVGjRrqvr6/u7u6u16xZU58wYUKBy97+NxPAvJUqVUqvUKGC3qxZM33ChAn6+fPn8x3z3+Vm9+zZo/fq1UuvVq2a7urqqlesWFFv3769Ra66ruvbt2/XH3zwQd3FxcXi7/h2md/u52bq1Kl6QECA7urqqj/yyCP63r178x1fmJ/F27WtoOxzcnL0sWPH6tWrV9dLlSqlBwQE6PHx8fr169ctygUGBha4BPCtlsEV4n6k6brMOBJCCCGEEEIUj8yxEEIIIYQQQhSbdCyEEEIIIYQQxSYdCyGEEEIIIUSxScdCCCGEEEIIUWzSsRBCCCGEEEIUm3QshBBCCCGEEMUmD8gTDslkMnH69Gm8vLzQNE11c4QQQggh7km6rvPPP/9QuXLl2z5QFaRjIRzU6dOnCQgIUN0MIYQQQgiHcPLkSapWrXrbMtKxEA7Jy8sLgGPHjlGmTBnFrbm/GI1Gjhw5QnBwME5OTqqbc1+R7NWQ3NWR7NWR7NWxdfaZmZkEBASYr61uRzoWwiHlDX/y9vbG29tbcWvuL0ajEU9PT7y9veU/GxuT7NWQ3NWR7NWR7NVRlX1hhpbL5G0hhBBCCCFEsUnHQghhdXea3CVKjmSvhuSujmSvjmSvjr1mr+m6rqtuhBDWlpmZiY+PDxkZGTIUSgghhBDiLhXlmso+uztCWIn0m21P13WysrIkewUkezUkd3Uke3Uke3XsOXvpWAiHZjKZVDfhvmMymTh16pRkr4Bkr4bkro5kr45kr449Zy8dCyGEEEIIIUSxScdCCCGEEEIIUWzSsRAOrTBrLgvr0jQNFxcXyV4ByV4NyV0dyV4dyV4de85eVoUSDklWhRJCCCGEKD5ZFUqI/0f6zban6zrp6emSvQKSvRqSuzqSvTqSvTr2nL10LIRDs8cVExydyWTi7Nmzkr0Ckr0akrs6kr06kr069py9dCyEEEIIIYQQxSYdCyGEEEIIIUSxScdCODR7XDHB0WmahoeHh2SvgGSvhuSujmSvjmSvjj1nL6tCCYckq0IJIYQQQhSfrAolxP9jjxObHJ3JZOLChQuSvQKSvRqSuzqSvTqSvTr2nL10LIRDkxtytqfrOhcuXJDsFZDs1ZDc1ZHs1ZHs1bHn7KVjIYQQQgghhCg26VgIIYQQQgghik06FsKh2eOKCY5O0zR8fHwkewUkezUkd3Uke3Uke3XsOXtn1Q0QoiS13fAmzqVdVTdDCCGEEMJqtrafproJBZI7FsKhGXT76807OoOuEayXk+wVkOzVkNzVkezVkezVMegaZ86ckVWhhLA1+efO9jSgku4p2Ssg2ashuasj2asj2aujARkZGbIqlBAAW7ZsQdM00tPTVTdFCCGEEOK+N2TIEAICAvD29qZKlSq8/PLL3Lhxo8j1SMdCWEVcXBydO3dW3QwhhBBCCFFEAwcO5ODBg2RmZrJ371727t3L5MmTi1yPTN4WDs2EjpPqRtxnTOic1NIxYX+3aB2dZK+G5K6OZK+OZK+OCZ3y5ctbdVWoiIgI8591XcdgMJCWllbkeuSOhbC67Oxshg4dSsWKFXFzc+Phhx9m165d+colJiYSFRWFm5sbTZo04ffffze/d/z4cTp06ECZMmXw8PCgVq1afPfdd0Vui8wpsz1dg5NahmSvgGSvhuSujmSvjmSvjq5B+fLlMRisexn/3nvv4enpScWKFdm7dy9Dhgwpch3SsRBWN3LkSL7++msWL17Mnj17CAkJITY2lkuXLlmUGzFiBFOnTmXXrl1UqFCBDh06kJOTA8CgQYPIzs7m559/Zv/+/UyaNAlPT89bnjM7O5vMzEyLDWRVKBUMukakqaJkr4Bkr4bkro5kr45kr45B1zh58qTVV4V6/fXXycrK4sCBA7zwwgv4+fkVvW1WbZG47125coV58+bx/vvv07ZtWyIjI1mwYAHu7u58/PHHFmVHjx5Nq1atqFOnDosXL+bcuXN88803AJw4cYLo6Gjq1KlDjRo1aN++Pc2aNbvleSdOnIiPj495CwgIAGRVKBU0wBd3yV4ByV4NyV0dyV4dyV4djZvXWyW1KlRERAR169YlLi6uyMdKx0JY1ZEjR8jJySE6Otq8r1SpUjRq1IiUlBSLsk2bNjX/uWzZsoSHh5vLDB06lPHjxxMdHc3o0aPZt2/fbc8bHx9PRkaGeTt58qQVP5UQQgghxP0jJydH5lgIx9GvXz/+/PNP+vTpw/79+2nQoAGzZ8++ZXlXV1e8vb0tNiGEEEIIcXtZWVksWrSI9PR0dF1n//79jB8/ntjY2CLXJR0LYVXBwcG4uLiQmJho3peTk8OuXbuIjIy0KPvLL7+Y/3z58mUOHTpksSpBQEAAL7zwAitWrGDYsGEsWLCgyO2R1Spsz4TOYe2iZK+AZK+G5K6OZK+OZK+OCR0/Pz+rTd7WNI1ly5YRHByMl5cXnTp14vHHH2fGjBlFrkuWmxVW5eHhwYsvvsiIESMoW7Ys1apVY/LkyVy9epXnnnvOouy4ceMoV64clSpV4s0336R8+fLmZ2G8/PLLtG3blrCwMC5fvsyPP/5o0ekoLJlTZnu6BufJUt2M+5Jkr4bkro5kr45kr46uga+vr9Xq8/DwYOPGjVapS+5YCKswmUw4O9/sp7733nt069aNPn36UL9+fQ4fPsz69espU6aMxTHvvfceL730Eg8++CBnz55lzZo1uLi4AGA0Ghk0aBARERG0adOGsLAw5s6dW+R2yWoVtmfQNeqZKkv2Ckj2akju6kj26kj26hh0jT///NPqq0JZg9yxEFZx/vx5QkJCAHBzc2PWrFnMmjWrwLItWrQwr2TQvn37Asvcbj5FUcg/d7anAaUpJdkrINmrIbmrI9mrI9mrowE3btwosVWhikPuWIhiuXz5MmvXrmXLli20bNlSdXOEEEIIIYQimm6P3R1xz+jSpQu7du2ib9++jB8/3qqPly+OzMxMfHx8uHTpUr4hWKJkGY1G0tLSCA0NxcnJSXVz7iuSvRqSuzqSvTqSvTq2zj7vmiojI+OOq25Kx0I4pLxfgvT0dHx8fFQ3576i6zpXrlzBw8PDbjqa9wvJXg3JXR3JXh3JXh1bZ1+UjoXMsRAOTf6xsz1N0/D09FTdjPuSZK+G5K6OZK+OZK+OPWcvcyyEQzMajaqbcN8xGo0cOnRIsldAsldDcldHsldHslfHnrOXOxbCoXXYMArNw0V1M+4rTrpGY70aO1NPYNRkpKUtSfZqSO7qOOka80P7q27Gfcselzu9X9hr9nLHQgghhBBCCFFs0rEQQgghhBBCFJt0LISFoKAgZsyYYdU6W7Rowcsvv2zVOgvLiAxLsDUjOsnaacleAcleDcldHSM61atXx2Cw3uVMdnY2/fv3p3r16nh5eVGzZk0WLlxotfodhcFgsHr2onDsOXuZY2Hnzp49y8SJE/n22285deoUPj4+hISE8NRTT9G3b19Kly6tuol3tGLFCkqVKqW6GcKGsslV3YT7lmSvhuSujrOzdS9lcnNz8ff3Z9OmTdSoUYOdO3fStm1bqlatSuvWra16rnudtbMXhWev2dtfV0eY/fnnnzzwwANs2LCBd999l99++40dO3YwcuRI1q5dy6ZNm+6qXqPRaNNJP2XLlsXLy8tm5/s3J2S5WVtz4uZEVsne9iR7NSR3dZzQSEtLs+r/aR4eHowbN47g4GA0TaNJkybExMSwbds2q53DEZhMJqtnLwrHnrOXjoUdGzhwIM7OzuzevZsePXoQERFBjRo16NSpE99++y0dOnQAYNq0adSpUwcPDw8CAgIYOHAgWVlZ5noSEhLw9fVl9erVREZG4urqyokTJzh//jwdOnTA3d2d6tWrs3Tp0nxtSE9Pp1+/flSoUAFvb28effRR9u7da35/zJgx1KtXj08++YSgoCB8fHzo2bMn//zzj7nMf4dCBQUF8e677/Lss8/i5eVFtWrV+N///mdx3u3bt1OvXj3c3Nxo0KABK1euRNM0kpOTrZSuEEIIcWfXr18nKSmJqKgo1U0Rwu5Jx8JOXbx4kQ0bNjBo0CA8PDwKLJP38DeDwcCsWbP4448/WLx4MT/88AMjR460KHv16lUmTZrERx99xB9//EHFihWJi4vj5MmT/Pjjj3z11VfMnTuX8+fPWxz3xBNPcP78eb7//nt+/fVX6tevz2OPPcalS5fMZY4cOcLKlStZu3Yta9eu5aeffuK999677eebOnUqDRo04LfffmPgwIG8+OKLpKamAjef8NihQwfq1KnDnj17eOedd3jttdduW192djaZmZkWmxBCCFEcuq7Tr18/QkND6dq1q+rmCGH3pGNhpw4fPoyu64SHh1vsL1++PJ6ennh6epovtl9++WViYmIICgri0UcfZfz48XzxxRcWx+Xk5DB37lweeughwsPDOXXqFN9//z0LFiygSZMmPPjgg3z88cdcu3bNfMy2bdtISkriyy+/pEGDBoSGhjJlyhR8fX356quvzOVMJhMJCQnUrl2bRx55hD59+rB58+bbfr527doxcOBAQkJCeO211yhfvjw//vgjAMuWLUPTNBYsWEBkZCRt27ZlxIgRt61v4sSJ+Pj4mLeAgIA7hyyEEELcgq7rDBw4kNTUVFauXGmXE2WFsDfyW3KPSUpKIjk5mVq1apGdnQ3Apk2beOyxx6hSpQpeXl706dOHixcvcvXqVfNxLi4uFrdxU1JScHZ25sEHHzTvq1mzJr6+vubXe/fuJSsri3Llypk7M56enhw9epQjR46YywUFBVnMofD398935+O//t0WTdPw8/MzH5OamkpUVBRubm7mMo0aNbptffHx8WRkZJi3kydPArIqlApGdHZqJyR7BSR7NSR3dYzohIaGWv2iX9d1Bg0axM6dO9mwYQM+Pj5Wrd8RGAyGEsle3Jk9Z2+fU8oFISEhaJpmHh6Up0aNGgC4u7sDcOzYMdq3b8+LL77IhAkTKFu2LNu2beO5557jxo0b5lWj3N3dzUOnCisrKwt/f3+2bNmS771/d0D+u+KTpml3nFB0N8fcjqurK66urnd9vLAuV5y5So7qZtyXJHs1JHd1cnNzcXFxsWqdgwcPJjExkR9++IEyZcpYtW5HUhLZi8Kx1+ztr6sjAChXrhytWrVizpw5XLly5Zblfv31V0wmE1OnTqVJkyaEhYVx+vTpO9Zfs2ZNcnNz+fXXX837UlNTSU9PN7+uX78+Z8+exdnZmZCQEIutfPnyxfp8txMeHs7+/fvNd2QAdu3adVd1ySottueERj29smSvgGSvhuSujhMaR48eterqOMePH2fu3LmkpqYSGBhovlv/wgsvWO0cjsBkMlk9e1E49py9dCzs2Ny5c8nNzaVBgwZ8/vnnpKSkkJqayqeffsrBgwdxcnIiJCSEnJwcZs+ezZ9//sknn3zC/Pnz71h3eHg4bdq0YcCAAezcuZNff/2Vfv36me+EALRs2ZKmTZvSuXNnNmzYwLFjx9i+fTtvvvkmu3fvLrHP/X//93+YTCaef/55UlJSWL9+PVOmTAEo8l0XIYQQoigCAwPRdZ3r16+TlZVl3grzf6sQ9zvpWNix4OBgfvvtN1q2bEl8fDx169alQYMGzJ49m+HDh/POO+9Qt25dpk2bxqRJk6hduzZLly5l4sSJhap/0aJFVK5cmebNm9O1a1eef/55KlasaH5f0zS+++47mjVrxjPPPENYWBg9e/bk+PHjVKpUqaQ+Nt7e3qxZs4bk5GTq1avHm2++ydtvvw1gMe9CCCGEEELYD03XdZltJuze0qVLeeaZZ8jIyLC4q3IrmZmZ+Pj4EL18EJqH/Y1BdGROusaDelV+1U5h1OSfF1uS7NWQ3NVx0jX+Fz6A4OBgnJycVDfnvmI0Gjly5Ihkr4Cts8+7psrIyMDb2/u2ZWXytrBLS5YsoUaNGlSpUoW9e/fy2muv0aNHj0J1Kv7NqOnyQ25jRk0nSTupuhn3JcleDcldHaOmExYWproZ9yUnJyfJXhF7zl6uuYRdOnv2LG+//TZnz57F39+fJ554ggkTJhS5nnWx78oygTam6zpXrlzBw8ND5sTYmGSvhuSujq7rZGVlSfYKyM+9OvacvcyxEHZp5MiRHDt2jOvXr3P06FGmT59uXjq3KOxxxQRHZzKZOHXqlGSvgGSvhuSujmSvjmSvjj1nLx0LIYQQQgghRLFJx0IIIYQQQghRbDLHQji09htGYZBVoWzKoGtE6f7sSzuDSVbIsSnJXg3JXR2DrrGo1iC7G2d+P9A0DRcXF8leAXvOXjoWwqGZNF1uy9mYSdNJ1u789HdhfZK9GpK7OiZNp0aNGqqbcV8yGAySvSL2nL1ccwmHJl8e2p6mQ0XdU7JXQLJXQ3JXR9MhPT0deSSX7em6LtkrYs/ZS8dCKJOQkICvr2+JnsOA/d0mdHQGNEL0cpK9ApK9GpK7OgY0zp49a9XVcbKzs+nfvz/Vq1fHy8uLmjVrsnDhQqvV7yhMJpPVsxeFY8/ZS8dCAPD333/z4osvUq1aNVxdXfHz8yM2NpbExETg5ni+lStXqm2kEEIIUcJyc3Px9/dn06ZNZGZmkpCQwLBhw9iwYYPqpglh92SOhQCgW7du3Lhxg8WLF1OjRg3OnTvH5s2buXjxouqmCSGEEDbj4eHBuHHjzK+bNGlCTEwM27Zto3Xr1gpbJoT9kzsWgvT0dLZu3cqkSZOIiYkhMDCQRo0aER8fT8eOHQkKCgKgS5cuaJpmfg0wb948goODcXFxITw8nE8++SRf3QMGDKBSpUq4ublRu3Zt1q5dW2A7/v77bxo0aECXLl3Izs7m8uXL9O7dmwoVKuDu7k5oaCiLFi0q0mezv9GHjk8H0rkm2Ssg2ashuaujQ4k/ffj69eskJSURFRVVYue4F2maZpdPfr4f2HP2csdC4OnpiaenJytXrqRJkya4urpavL9r1y4qVqzIokWLaNOmDU5OTgB88803vPTSS8yYMYOWLVuydu1annnmGapWrUpMTAwmk4m2bdvyzz//8OmnnxIcHMyBAwfMx//byZMnadWqFU2aNOHjjz/GycmJYcOGceDAAb7//nvKly/P4cOHuXbtWpE+m6wKZXsmTeeAdl51M+5Lkr0akrs6Jk0nICCgxOrXdZ1+/foRGhpK165dS+w89yKDwVCi2Ytbs+fspWMhcHZ2JiEhgf79+zN//nzq169P8+bN6dmzJ1FRUVSoUAEAX19f/Pz8zMdNmTKFuLg4Bg4cCMCrr77KL7/8wpQpU4iJiWHTpk0kJSWRkpJCWFgYQIHLo6WmptKqVSu6dOnCjBkzzD3wEydO8MADD9CgQQMAizsl/5WdnU12drb5dWZmJiCrQqmg6VAVH06RgW5/X6Y4NMleDcldHU2HCxcuULZsWQwG636NpOs6AwcOJDU1lU2bNlm9/nudyWTi0qVLJZK9uD17zt6+WiOU6datG6dPn2b16tW0adOGLVu2UL9+fRISEm55TEpKCtHR0Rb7oqOjSUlJASA5OZmqVauaOxUFuXbtGo888ghdu3Zl5syZFrf1XnzxRZYvX069evUYOXIk27dvv2U9EydOxMfHx7zl9eRllRbbM6ARoPtK9gpI9mpI7uoY0Lhw4YLVl93UdZ1Bgwaxc+dONmzYgI+Pj1XrdwS6rpdI9uLO7Dl76VgIMzc3N1q1asWoUaPYvn07cXFxjB49+q7rc3d3v2MZV1dX8zCqv/76y+K9tm3bcvz4cV555RVOnz7NY489xvDhwwusJz4+noyMDPN28uTJu263EEKI+9vgwYNJTExk48aNlClTRnVzhLhnSMdC3FJkZCRXrlwBoFSpUhiNRov3IyIizMvR5klMTCQyMhKAqKgoTp06xaFDh255DoPBwCeffMKDDz5ITEwMp09bPr22QoUK9O3bl08//ZQZM2bwv//9r8B6XF1d8fb2ttiEEEKIojp+/Dhz584lNTWVwMBA8zzEF154QXXThLB7MsdCcPHiRZ544gmeffZZoqKi8PLyYvfu3UyePJlOnToBN+c3bN68mejoaFxdXSlTpgwjRoygR48ePPDAA7Rs2ZI1a9awYsUKNm3aBEDz5s1p1qwZ3bp1Y9q0aYSEhHDw4EE0TaNNmzbm8zs5ObF06VJ69erFo48+ypYtW/Dz8+Ptt9/mwQcfpFatWmRnZ7N27VoiIiKK9Nl0kMEJNqYD57QsWSFHAcleDcldHR3w8fGx6uo4gYGBdjnExN5ommb17EXh2HP2csdC4OnpSePGjZk+fTrNmjWjdu3ajBo1iv79+zNnzhwApk6dysaNGwkICOCBBx4AoHPnzsycOZMpU6ZQq1YtPvzwQxYtWkSLFi3MdX/99dc0bNiQXr16ERkZyciRI/Pd+YCbE8g/++wzatWqxaOPPsr58+dxcXEhPj6eqKgomjVrhpOTE8uXLy/SZzPJ7G2bM2k6R7SLkr0Ckr0akrs6Jk3H39/f7iaw3g8MBoNkr4g9Z6/p0i0XDigzMxMfHx8eWj4Ig4eL6ubcVwy6RnXKcpRLcqFlY5K9GpK7OgZdY3mD4VSqVMkuL7Icmclk4ty5c5K9ArbOPu+aKiMj445DzeUnQTg0+7tJ6Pg0oJLuKdkrINmrIbmrowEZGRkydEkBXdcle0XsOXvpWAghhBBCCCGKTSZvC4e2pvU7slSgjRmNRtLS0ng3NLTAp6yLkiPZqyG5q5OXvRDCPsgdC+HQ7HHFBEenaRrly5eX7BWQ7NWQ3NWR7NWR7NWx5+xl8rZwSEWZaCSEEEIIIQomk7eF+H9MJpPqJtx3TCYTJ0+elOwVkOzVkNzVkezVkezVsefsZY6FcGjt17+FJsvN2pSTrtFYr8bO5BMYZelNm5Ls1ZDc1XHSNeaH9rfL1XEcna7rXLlyRbJXwJ6zlzsWQgghhBBCiGKTjoUDiouLo3PnzqqbIYQQQtxzsrOz6d+/P9WrV8fLy4uaNWuycOFC1c0S4p4gHYsSFBcXh6Zp+bY2bdqobto9Y8uWLWiaRnp6+l0db8L+bhM6OhM6h7WLkr0Ckr0akrs6JnT8/Pys+vTh3Nxc/P392bRpE5mZmSQkJDBs2DA2bNhgtXM4AoPBYPXsReHYc/Yyx6KEtWnThkWLFlnsc3V1VdSa+49ufyuxOTxdg/NkqW7GfUmyV0NyV0fXwNfX16p1enh4MG7cOPPrJk2aEBMTw7Zt22jdurVVz3Uv0zTN6tmLwrHn7O2vq+NgXF1d8fPzs9jyHtimaRoffvgh7du3p3Tp0kRERLBjxw4OHz5MixYt8PDw4KGHHuLIkSPm+saMGUO9evX48MMPCQgIoHTp0vTo0YOMjIxbtiE7O5uhQ4dSsWJF3NzcePjhh9m1axdwcwJQSEgIU6ZMsTgmOTkZTdM4fPjwXbcVYNWqVdSvXx83Nzdq1KjB2LFjyc3NNb+vaRofffQRXbp0oXTp0oSGhrJ69WoAjh07RkxMDABlypRB0zTi4uKKlL9BehY2Z9A16pkqS/YKSPZqSO7qGHSNP//8s0RXx7l+/TpJSUlERUWV2DnuRSaTqcSzFwWz5+ylY6HYO++8w9NPP01ycjI1a9bk//7v/xgwYADx8fHs3r0bXdcZPHiwxTGHDx/miy++YM2aNaxbt47ffvuNgQMH3vIcI0eO5Ouvv2bx4sXs2bOHkJAQYmNjuXTpEpqm8eyzz+a7q7Jo0SKaNWtGSEjIXbd169atPP3007z00kscOHCADz/8kISEBCZMmGBxrrFjx9KjRw/27dtHu3bt6N27N5cuXSIgIICvv/4agNTUVM6cOcPMmTOLlK/8N297GlCaUpK9ApK9GpK7Ohpw48aNElsdR9d1+vXrR2hoKF27di2Rc9yrdF0v0ezFrdlz9tKxKGFr167F09PTYnv33XfN7z/zzDP06NGDsLAwXnvtNY4dO0bv3r2JjY0lIiKCl156iS1btljUef36dZYsWUK9evVo1qwZs2fPZvny5Zw9ezbf+a9cucK8efN4//33adu2LZGRkSxYsAB3d3c+/vhj4OZckNTUVJKSkgDIyclh2bJlPPvssxZ1FbWtY8eO5fXXX6dv377UqFGDVq1a8c477/Dhhx9a1BsXF0evXr0ICQnh3XffJSsri6SkJJycnChbtiwAFStWxM/PDx8fnwJzzs7OJjMz02ITQggh7pau6wwcOJDU1FRWrlxpl+PZhbA3MseihMXExDBv3jyLfXkXy4DFrdVKlSoBUKdOHYt9169fJzMz0/y0w2rVqlGlShVzmaZNm2IymUhNTcXPz8/iXEeOHCEnJ4fo6GjzvlKlStGoUSNSUlIAqFy5Mo8//jgLFy6kUaNGrFmzhuzsbJ544gmLuora1r1795KYmGhxh8JoNHL9+nWuXr1K6dKl89Xr4eGBt7c358+fLyDNW5s4cSJjx44t0jFCCCFEQXRdZ9CgQezcuZPNmzff8kstIYQl6ViUMA8PD4vhRP9VqlQp8581TbvlvpIeR9evXz/69OnD9OnTWbRoEU8++aT5wv9u25qVlcXYsWMLvH3s5uZWYL159RT188bHx/Pqq6+aX2dmZhIQEIARXX7IbcyIzgHtHEZZIcfmJHs1JHd1jOhUrVrV6ncTBg8eTGJiIj/88IN5XqSwZDAYSiR7cWf2nL1cc92DTpw4wenTp6lcuTIAv/zyCwaDgfDw8Hxlg4ODcXFxITExkcDAQODmUKddu3bx8ssvm8u1a9cODw8P5s2bx7p16/j555+L3c769euTmpp6247Vnbi43HxqttFovG05V1fXglfbkkHPtqdBOtdVt+L+JNmrIbmro4Gnp6dVqzx+/Dhz587F1dXV/P8mwFNPPcX8+fOteq57maZpVs9eFI49Zy8dixKWnZ2db+6Ds7Mz5cuXv+s63dzc6Nu3L1OmTCEzM5OhQ4fSo0ePfMOg4OYdkxdffJERI0ZQtmxZqlWrxuTJk7l69SrPPfecuZyTkxNxcXHEx8cTGhpK06ZN77p9ed5++23at29PtWrV6N69OwaDgb179/L7778zfvz4QtURGBiIpmmsXbuWdu3a4e7uXqRfJidZpcXmnHSNB/Wq/KqdwqjJN7i2JNmrIbmr46RrHDp0iODgYJycnKxSZ2BgoF1OirU3RqORI0eOWDV7UTj2nL393UNxMOvWrcPf399ie/jhh4tVZ0hICF27dqVdu3a0bt2aqKgo5s6de8vy7733Ht26daNPnz7Ur1+fw4cPs379+ny3d5977jlu3LjBM888U6z25YmNjWXt2rVs2LCBhg0b0qRJE6ZPn27xDdCdVKlSxTwJvFKlSvlWyBL2yVn+aVFGsldDclfHHpfcvF9I9urYa/aaLt3ye8qYMWNYuXIlycnJVq9769atPPbYY5w8edI8OftelZmZiY+PD9HLB6F5uKhuzn3FSddorFdjp3ZCvr21McleDcldHSddY35of0JDQ+3um1tHZzQaSUtLk+wVsHX2eddUGRkZ5oWEbkWGQgmys7P5+++/GTNmDE888cQ936kQQgghhBC2J/duBZ999hmBgYGkp6czefJk1c2xKlmlxfaM6CRrpyV7BSR7NSR3dYzoVK9e3S5Xx3F0BoNBslfEnrOXoVDCIeXdtktPT5f1x21M13VMJhMGg8G8BLGwDcleDcldHcleHcleHVtnX5ShUPbX1RHCiux1cpMjM5lMpKWlSfYKSPZqSO7qSPbqSPbq2HP20rEQQgghhBBCFJt0LIQQQgghhBDFJqtCCYfWYcMoWW7WxsxLb6YtkKU3bUyyV0NyVydvuVkhhH2QOxbCockqLbZnRL+5nr9kb3OSvRqSuzpGdEJDQ+1ydRxHZzAYJHtF7Dl7+2uRcDiaprFy5UrVzRA25Co3Q5WR7NWQ3NXJzc21an3Z2dn079+f6tWr4+XlRc2aNVm4cKFVz+EorJ29KDx7zV46Fg4sLi6Ozp0759u/ZcsWNE0jPT3dJu04c+YMbdu2tcm5/ssJWQLP1pzQqKdXluwVkOzVkNzVcULj6NGjVl0dJzc3F39/fzZt2kRmZiYJCQkMGzaMDRs2WO0cjsBkMlk9e1E49py9dCxEifPz88PV1VV1M4QQQog78vDwYNy4cQQHB6NpGk2aNCEmJoZt27apbpoQdk86FoKvv/6aWrVq4erqSlBQEFOnTrV4v6ChTL6+viQkJABw48YNBg8ejL+/P25ubgQGBjJx4sQCjz927BiaprFixQpiYmIoXbo0devWZceOHRb1L1iwgICAAEqXLk2XLl2YNm0avr6+1v7oQgghxG1dv36dpKQkoqKiVDdFCLsnHYv73K+//kqPHj3o2bMn+/fvZ8yYMYwaNcrcaSiMWbNmsXr1ar744gtSU1NZunQpQUFBtz3mzTffZPjw4SQnJxMWFkavXr3M4wUTExN54YUXeOmll0hOTqZVq1ZMmDChGJ9S2Fou9nd79n4h2ashuatTkhNYdV2nX79+hIaG0rVr1xI7z73KHicP3y/sNXuZbebg1q5di6enp8U+o9Fo/vO0adN47LHHGDVqFABhYWEcOHCA999/n7i4uEKd48SJE4SGhvLwww+jaRqBgYF3PGb48OE8/vjjAIwdO5ZatWpx+PBhatasyezZs2nbti3Dhw83t2n79u2sXbv2lvVlZ2eTnZ1tfp2ZmXnzs2q6/JDbmFHTSdJOqm7GfUmyV0NyV8eo6YSFhZVI3bquM3DgQFJTU9m0aZPdXsip4uTkVGLZi9uz5+zlt8TBxcTEkJycbLF99NFH5vdTUlKIjo62OCY6Opq0tDSLDsjtxMXFkZycTHh4OEOHDi3UBLd/31L29/cH4Pz58wCkpqbSqFEji/L/ff1fEydOxMfHx7wFBATcfENWf7Q9HXx1N8leBcleDcldHR2ysrLQdeuGr+s6gwYNYufOnWzYsAEfHx+r1u8IdF0vkezFndlz9tKxcHAeHh6EhIRYbFWqVClSHZqm5fvhzcnJMf+5fv36HD16lHfeeYdr167Ro0cPunfvfts6S5UqZVE/UKzVDeLj48nIyDBvJ0/e/PZQVmmxPSc0IvVKkr0Ckr0akrs6TmicOnXK6qvjDB48mMTERDZu3EiZMmWsWrejMJlMJZK9uDN7zl5GidznIiIiSExMtNiXmJhIWFgYTk5OAFSoUIEzZ86Y309LS+Pq1asWx3h7e/Pkk0/y5JNP0r17d9q0acOlS5coW7ZskdsUHh7Orl27LPb99/V/ubq6yspTQgghiu348ePMnTsXV1dXi6G9Tz31FPPnz1fYMiHsn3Qs7nPDhg2jYcOGvPPOOzz55JPs2LGDOXPmMHfuXHOZRx99lDlz5tC0aVOMRiOvvfaaxR2HadOm4e/vzwMPPIDBYODLL7/Ez8/vrldxGjJkCM2aNWPatGl06NCBH374ge+//958Z0MIIYQoKYGBgXY5xESIe4EMhbrP1a9fny+++ILly5dTu3Zt3n77bcaNG2cxcXvq1KkEBATwyCOP8H//938MHz6c0qVLm9/38vJi8uTJNGjQgIYNG3Ls2DG+++67u57oFh0dzfz585k2bRp169Zl3bp1vPLKK7i5uRW5LvmvwfZ04Co5kr0Ckr0akrs6OuDi4iJfPCmgaZpkr4g9Z6/p0i0X94D+/ftz8OBBtm7dWqjymZmZ+Pj40OTzgTiXliFSQgjhqLa2n6a6CUI4tLxrqoyMDLy9vW9bVu5YCLs0ZcoU9u7dy+HDh5k9ezaLFy+mb9++Ra5Hk26zzWk6VNQ9JXsFJHs1JHd1NB3S09Nl6JICuq5L9orYc/bSsRB2KSkpiVatWlGnTh3mz5/PrFmz6NevX5HrMcgqLTZnQCNELyfZKyDZqyG5q2NA4+zZs3a5Oo6jM5lMkr0i9py9TN4WdumLL76wSj1rWr8jSwXamNFoJC0tjXdDQ80riwnbkOzVkNzVycteCGEf5I6FEEIIIYQQotikYyEcmj2umODoNE3Dw8NDsldAsldDcldHsldHslfHnrOXVaGEQyrKCgZCCCGEEKJgRbmmkjkWwqG1+T4eJw9ZbtaWNB2q4sMpMtDt78sUhybZqyG5q6PpsKLpG5QtW/aun50k7o7JZOLSpUuSvQL2nL19tUYIK5NVWmzPgEaA7ivZKyDZqyG5q2NA48KFC3a57Kaj03VdslfEnrOXjoUoloSEBHx9fUv8PHFxcXTu3LnEzyOEEOL+lp2dTf/+/alevTpeXl7UrFmThQsXqm6WEPcE6VgI/v77b1588UWqVauGq6srfn5+xMbGkpiYqLppQgghhE3l5ubi7+/Ppk2byMzMJCEhgWHDhrFhwwbVTRPC7skcC0G3bt24ceMGixcvpkaNGpw7d47Nmzdz8eJF1U0rNh1kcIKN6cA5LQv7u0Hr+CR7NSR3dXTAx8fHqqvjeHh4MG7cOPPrJk2aEBMTw7Zt22jdurXVznOv0zTN6tmLwrHn7OWOxX0uPT2drVu3MmnSJGJiYggMDKRRo0bEx8fTsWNHc5kBAwZQqVIl3NzcqF27NmvXrrWoZ/369URERODp6UmbNm04c+aM+T2TycS4ceOoWrUqrq6u1KtXj3Xr1lkcv3//fh599FHc3d0pV64czz//PFlZWcX+fCZN/qu3NZOmc0S7KNkrINmrIbmrY9J0/P39S3QC6/Xr10lKSiIqKqrEznEvMhgMJZ69KJg9Z29/LRI25enpiaenJytXriQ7Ozvf+yaTibZt25KYmMinn37KgQMHeO+99yyeLnv16lWmTJnCJ598ws8//8yJEycYPny4+f2ZM2cydepUpkyZwr59+4iNjaVjx47mp6VeuXKF2NhYypQpw65du/jyyy/ZtGkTgwcPLvbnM8gSLTZn0DWC9XKSvQKSvRqSuzoGXePMmTOYTKYSqV/Xdfr160doaChdu3YtkXPcq0wmU4lmL27NnrOXjsV9ztnZmYSEBBYvXoyvry/R0dG88cYb7Nu3D4BNmzaRlJTEihUraNWqFTVq1KB9+/a0bdvWXEdOTg7z58+nQYMG1K9fn8GDB7N582bz+1OmTOG1116jZ8+ehIeHM2nSJOrVq8eMGTMAWLZsGdevX2fJkiXUrl2bRx99lDlz5vDJJ59w7ty5Qn2O7OxsMjMzLTaQYVAqaEAl3VOyV0CyV0NyV0cDMjIySmR1HF3XGThwIKmpqaxcudIuvx1WSdf1Este3J49Zy+/JYJu3bpx+vRpVq9eTZs2bdiyZQv169cnISGB5ORkqlatSlhY2C2PL126NMHBwebX/v7+nD9/Hrj5UJXTp08THR1tcUx0dDQpKSkApKSkULduXTw8PCzeN5lMpKamFuozTJw4ER8fH/MWEBBQ6M8vhBBC/Juu6wwaNIidO3eyYcMGfHx8VDdJiHuCdCwEAG5ubrRq1YpRo0axfft24uLiGD16NO7u7nc8tlSpUhavNU2zeS86Pj6ejIwM83by5Embnl8IIYTjGDx4MImJiWzcuJEyZcqobo4Q9wzpWIgCRUZGcuXKFaKiojh16hSHDh26q3q8vb2pXLlyvqVrExMTiYyMBCAiIoK9e/dy5coVi/cNBgPh4eGFOo+rqyve3t4WG4BJ1mmxORM6J7V0yV4ByV4NyV0dEzrly5e36uo4x48fZ+7cuaSmphIYGGiei/jCCy9Y7RyOQNM0q2cvCsees5flZu9zFy9e5IknnuDZZ58lKioKLy8vdu/ezeTJk+nUqRPNmzenWbNmdOvWjWnTphESEsLBgwfRNI02bdoU6hwjRoxg9OjRBAcHU69ePRYtWkRycjJLly4FoHfv3owePZq+ffsyZswY/v77b4YMGUKfPn2oVKlSsT6fzKW0PV2Dk2SobsZ9SbJXQ3JXR9egfPnyVq0zMDDQLseu2xuDwWD17EXh2HP20rG4z3l6etK4cWOmT5/OkSNHyMnJISAggP79+/PGG28A8PXXXzN8+HB69erFlStXCAkJ4b333iv0OYYOHUpGRgbDhg3j/PnzREZGsnr1akJDQ4GbczTWr1/PSy+9RMOGDSldurS5I1NcskqL7Rl0jZp6BQ5qf8vymzYm2ashuatj0DVOnjxJlSpVZHK1jZlMJv766y/JXgF7zl7TpVsuHFBmZiY+Pj5ELx+E5uGiujn3FSddo7FejZ3aCYxykWVTkr0akrs6TrrG/ND+hIaGWiyDLkqe0WgkLS1NslfA1tnnXVNlZGSYh5rfin11c4QQQgghhBD3JOlYCCGEEEIIIYpN5lgIh/Ztmwmy/riN5T24x8fHxy5XrHBkkr0akrs6ednb2zjz+4HBYMDPz0+yV8Ces5eOhXBo8p+87Wmahq+vr+pm3JckezUkd3Uke3Uke3XsOXv76+oIYUUmk0l1E+47JpOJP//8U7JXQLJXQ3JXR7JXR7JXx56zl46FcGiy6Jnt6brOjRs3JHsFJHs1JHd1JHt1JHt17Dl7GQolHFqHDaNkuVkbMy+9mbZAlt60McleDcldnbzlZoUQ9kHuWAghhBBCCCGKTToWDkrTNFauXKm6GYDathiRbw9tzYjOAe2cZK+AZK+G5K6OEZ2qVatadXWc7Oxs+vfvT/Xq1fHy8qJmzZosXLjQavU7CoPBYPXsReHYc/b21yJRKH///Tcvvvgi1apVw9XVFT8/P2JjY0lMTFTdtHzOnDlD27Zt1ZxcFoWyPQ3SteuSvQqSvRqSuzoaeHp6WnUFwNzcXPz9/dm0aROZmZkkJCQwbNgwNmzYYLVzOAJN06yevSgce85eOhb3qG7duvHbb7+xePFiDh06xOrVq2nRogUXL15U3bR8/Pz8cHV1VXJuJ93+fukcnZOu0cgUINkrINmrIbmr46RrHDp0CKPRaLU6PTw8GDduHMHBwWiaRpMmTYiJiWHbtm1WO4cjMBqNVs9eFI49Zy8di3tQeno6W7duZdKkScTExBAYGEijRo2Ij4+nY8eO5nIXLlygS5culC5dmtDQUFavXm1Rz08//USjRo1wdXXF39+f119/ndzcXPP7LVq0YPDgwQwePBgfHx/Kly/PqFGjLFYhCAoK4p133qFXr154eHhQpUoVPvjgA4vz/Hso1LFjx9A0jRUrVhATE0Pp0qWpW7cuO3bssDhmwYIFBAQEULp0abp06cK0adPsds1mkZ+z/NOijGSvhuSuTkkvuXn9+nWSkpKIiooq0fPci+xxudP7hb1mL/8S3oM8PT3x9PRk5cqVZGdn37Lc2LFj6dGjB/v27aNdu3b07t2bS5cuAfDXX3/Rrl07GjZsyN69e5k3bx4ff/wx48ePt6hj8eLFODs7k5SUxMyZM5k2bRofffSRRZn333+funXr8ttvv/H666/z0ksvsXHjxtt+hjfffJPhw4eTnJxMWFgYvXr1MndqEhMTeeGFF3jppZdITk6mVatWTJgw4W6iEkIIIe6aruv069eP0NBQunbtqro5Qtg96Vjcg5ydnUlISGDx4sX4+voSHR3NG2+8wb59+yzKxcXF0atXL0JCQnj33XfJysoiKSkJgLlz5xIQEMCcOXOoWbMmnTt3ZuzYsUydOtWiFxwQEMD06dMJDw+nd+/eDBkyhOnTp1ucJzo6mtdff52wsDCGDBlC9+7d85X5r+HDh/P4448TFhbG2LFjOX78OIcPHwZg9uzZtG3bluHDhxMWFsbAgQPvOEcjOzubzMxMi00IIYS4W7quM3DgQFJTU1m5cqVdTpQVwt7Ib8k9qlu3bpw+fZrVq1fTpk0btmzZQv369UlISDCX+fdtWw8PD7y9vTl//jwAKSkpNG3a1GLiT3R0NFlZWZw6dcq8r0mTJhZlmjZtSlpamsW4vqZNm1q0rWnTpqSkpNy2/f9um7+/P4C5bampqTRq1Mii/H9f/9fEiRPx8fExbwEBAYCsCqWCEZ1k7bRkr4Bkr4bkro4RnerVq1v9ol/XdQYNGsTOnTvZsGEDPj4+Vq3fERgMhhLJXtyZPWdvfy0Shebm5karVq0YNWoU27dvJy4ujtGjR5vfL1WqlEV5TdPsZkzev9uW13EpTtvi4+PJyMgwbydPnix2G8Xdyyb3zoVEiZDs1ZDc1XF2tv6zfgcPHkxiYiIbN26kTJkyVq/fUZRE9qJw7DV76Vg4kMjISK5cuVKoshEREezYscNiInZiYiJeXl5UrVrVvG/nzp0Wx/3yyy+Ehobi5ORkse+/ZSIiIu7mIwAQHh7Orl27LPb99/V/ubq64u3tbbEBOMn6jzbnxM2nEEv2tifZqyG5q+OERlpamlW/NDt+/Dhz584lNTWVwMBA87zGF154wWrncAQmk8nq2YvCsefs7bO7I27r4sWLPPHEEzz77LNERUXh5eXF7t27mTx5Mp06dSpUHQMHDmTGjBkMGTKEwYMHk5qayujRo3n11Vctbq2dOHGCV199lQEDBrBnzx5mz57N1KlTLepKTExk8uTJdO7cmY0bN/Lll1/y7bff3vXnGzJkCM2aNWPatGl06NCBH374ge+//94u12sWQgjhWAIDAy2+dBNCFJ50LO5Bnp6eNG7cmOnTp3PkyBFycnIICAigf//+vPHGG4Wqo0qVKnz33XeMGDGCunXrUrZsWZ577jneeusti3JPP/00165do1GjRjg5OfHSSy/x/PPPW5QZNmwYu3fvZuzYsXh7ezNt2jRiY2Pv+vNFR0czf/58xo4dy1tvvUVsbCyvvPIKc+bMues6hRBCCCFEyZKOxT3I1dWViRMnMnHixFuWKejblvT0dIvXzZs3N68SdSulSpVixowZzJs375ZlvL29+eKLLwrVlqCgoHxt8/X1zbevf//+9O/f3+J1SEjIbdsqhBBCCCHUkY6FsEtTpkyhVatWeHh48P3337N48WLmzp1b5HqM6PJDbmNGdHZqJ2SFHAUkezUkd3WM6ISGhtrl6jiOzmAwSPaK2HP2cs0l7FJSUhKTJ0/mn3/+oUaNGsyaNYt+/fqpbpYoJFecuUqO6mbclyR7NSR3dXJzc3FxcVHdjPuSZK+OvWav6TJDSTigzMxMfHx8uHTpkiwVaGNGo5G0tLR8q4eJkifZqyG5qyPZqyPZq2Pr7POuqTIyMsyrbt6K/d1DEUIIIYQQQtxzpGMhhBBCCCGEKDbpWAghrM4eJ5TdLyR7NSR3dSR7dSR7dew1e5ljIRxS3njAJp8PxLm0q+rmCCGEKCFb209T3QQhHJrMsRAij3SbbU8HX91NsldBsldDcldHh6ysLHlStgK6rkv2ithz9tKxEA7NCU11E+47TmhE6pUkewUkezUkd3Wc0Dh16hQmk0l1U+47JpNJslfEnrOXjoUoNk3TWLly5S3fDwoKYsaMGTZrjxBCCHG3srOz6d+/P9WrV8fLy4uaNWuycOFC1c0S4p4gHQsHd/bsWYYMGUKNGjVwdXUlICCADh06sHnzZpu1YdeuXTz//PM2O58QQghxt3Jzc/H392fTpk1kZmaSkJDAsGHD2LBhg+qmCWH35MnbDuzYsWNER0fj6+vL+++/T506dcjJyWH9+vUMGjSIgwcP2qQdFSpUsMl5CqKDDE6wMR24So4MN1dAsldDcldHB1xcXNA06/1L7+Hhwbhx48yvmzRpQkxMDNu2baN169ZWO8+9TtM0q2cvCsees5c7Fg5s4MCBaJpGUlIS3bp1IywsjFq1avHqq6/yyy+/AHDixAk6deqEp6cn3t7e9OjRg3PnzlnUM2/ePIKDg3FxcSE8PJxPPvnktucdPXo0/v7+7Nu3D8g/FErTND766CO6dOlC6dKlCQ0NZfXq1RZ1rF69mtDQUNzc3IiJiWHx4sVomkZ6enqRMjBp8l+9rZk0nWTDacleAcleDcldHZOmU6NGjRJdevP69eskJSURFRVVYue4FxkMhhLPXhTMnrO3vxYJq7h06RLr1q1j0KBBeHh45Hvf19cXk8lEp06duHTpEj/99BMbN27kzz//5MknnzSX++abb3jppZcYNmwYv//+OwMGDOCZZ57hxx9/zFenrusMGTKEJUuWsHXr1tv+Izx27Fh69OjBvn37aNeuHb179+bSpUsAHD16lO7du9O5c2f27t3LgAEDePPNN2/7ebOzs8nMzLTYAOT/edvTdKioe0r2Ckj2akju6mg6pKenl9jqOLqu069fP0JDQ+natWuJnONepet6iWYvbs2es5eOhYM6fPgwuq5Ts2bNW5bZvHkz+/fvZ9myZTz44IM0btyYJUuW8NNPP7Fr1y4ApkyZQlxcHAMHDiQsLIxXX32Vrl27MmXKFIu6cnNzeeqpp9i8eTPbtm0jJCTktu2Li4ujV69ehISE8O6775KVlUVSUhIAH374IeHh4bz//vuEh4fTs2dP4uLiblvfxIkT8fHxMW8BAQEAGGQglM0Z0AjRy0n2Ckj2akju6hjQOHv2bImsjqPrOgMHDiQ1NZWVK1fa5bfDKplMphLLXtyePWcvvyUOqjC92JSUFAICAswX4QCRkZH4+vqSkpJiLhMdHW1xXHR0tPn9PK+88go7d+7k559/pkqVKnc897/vZnh4eODt7c358+cBSE1NpWHDhhblGzVqdNv64uPjycjIMG8nT568YxuEEEKIgui6zqBBg9i5cycbNmzAx8dHdZOEuCdIx8JBhYaGommazSZot2rVir/++ov169cXqnypUqUsXmuaVqyet6urK97e3habEEIIcTcGDx5MYmIiGzdupEyZMqqbI8Q9QzoWDqps2bLExsbywQcfcOXKlXzvp6enExERwcmTJy2+3T9w4ADp6elERkYCEBERQWJiosWxiYmJ5vfzdOzYkWXLltGvXz+WL19erLaHh4eze/dui315Q7OKyv5GHzo+HUjnmmSvgGSvhuSujs7Nu97WXB3n+PHjzJ07l9TUVAIDA/H09MTT05MXXnjBaudwBJqmWT17UTj2nL0sN+vAPvjgA6Kjo2nUqBHjxo0jKiqK3NxcNm7cyLx58zhw4AB16tShd+/ezJgxg9zcXAYOHEjz5s1p0KABACNGjKBHjx488MADtGzZkjVr1rBixQo2bdqU73xdunThk08+oU+fPjg7O9O9e/e7aveAAQOYNm0ar732Gs899xzJyckkJCQAFPmXyKTp0nu2MZOmc0A7r7oZ9yXJXg3JXR2TplsM57WGwMBAu5wUa28MBoPVsxeFY8/ZyzWXA6tRowZ79uwhJiaGYcOGUbt2bVq1asXmzZuZN28emqaxatUqypQpQ7NmzWjZsiU1atTg888/N9fRuXNnZs6cyZQpU6hVqxYffvghixYtokWLFgWes3v37ixevJg+ffqwYsWKu2p39erV+eqrr1ixYgVRUVHMmzfPvCqUq6trkeqSVVpsT9MhQPeR7BWQ7NWQ3NXRdLhw4YJdTmJ1dCaTSbJXxJ6z13Tplot7wIQJE5g/f36hJ2VnZmbi4+ND9PJBaB4uJdw68W9OukZjvRo7tRMY5UrLpiR7NSR3dZx0jfmh/QkNDcXJyUl1c+4rRqORtLQ0yV4BW2efd02VkZFxxzmsMhRK2KW5c+fSsGFDypUrR2JiIu+//z6DBw9W3SwhhBBCCHEL0rEQdiktLY3x48dz6dIlqlWrxrBhw4iPjy9yPWtavyMrethY3jcp78q3WDYn2ashuauTl70Qwj5Ix0LYpenTpzN9+vRi12OPKyY4Ok3T8PHxkewVkOzVkNzVkezVkezVsefsZY6FcEhFGQ8ohBBCCCEKVpRrKlkVSjg0e1wxwdGZTCbOnDkj2Ssg2ashuasj2asj2atjz9nLUCjh0Nqvf0tWhbIxWSFHHcleDcldnbxVoSpWrKi6KfcdXdfJyMiQ7BWw5+zljoUQQgghhBCi2KRjIYQQQgghhCg26ViIYmnRogUvv/zyLd+Pi4ujc+fONmvPf5mQYQm2ZkLnpJYu2Ssg2ashuatjQqd8+fJWXR0nOzub/v37U716dby8vKhZsyYLFy60Wv2OQtM0q2cvCsees5eOhYOKi4tD0zTzVq5cOdq0acO+ffts2o6ZM2eSkJBg03P+m25/v3MOT9fgpJYh2Ssg2ashuauja1C+fHkMButdzuTm5uLv78+mTZvIzMwkISGBYcOGsWHDBqudwxEYDAarZy8Kx56zt78WCatp06YNZ86c4cyZM2zevBlnZ2fat29v0zb4+Pjg6+tr03P+m0H+p7c5g64Raaoo2Ssg2ashuatj0DVOnjxp1dVxPDw8GDduHMHBwWiaRpMmTYiJiWHbtm1WO4cjMJlMVs9eFI49Zy8dCwfm6uqKn58ffn5+1KtXj9dff52TJ0/y999/A/Daa68RFhZG6dKlqVGjBqNGjSInJ8d8/JgxY6hXrx6ffPIJQUFB+Pj40LNnT/75559bnvPbb7/Fx8eHpUuXAvmHQrVo0YKhQ4cycuRIypYti5+fH2PGjLGo4+DBgzz88MO4ubkRGRnJpk2b0DSNlStXFjkD+W/e9jTAF3fJXgHJXg3JXR0NuHLlCiX5SK7r16+TlJREVFRUiZ3jXqTreolnLwpmz9nLcrP3iaysLD799FNCQkIoV64cAF5eXiQkJFC5cmX2799P//798fLyYuTIkebjjhw5wsqVK1m7di2XL1+mR48evPfee0yYMCHfOZYtW8YLL7zAsmXLbntnZPHixbz66qvs3LmTHTt2EBcXR3R0NK1atcJoNNK5c2eqVavGzp07+eeffxg2bNgdP192djbZ2dnm15mZmUWJRwghhMhH13X69etHaGgoXbt2Vd0cIeyedCwc2Nq1a/H09ARufqPj7+/P2rVrzWPy3nrrLXPZoKAghg8fzvLlyy06FiaTiYSEBLy8vADo06cPmzdvztex+OCDD3jzzTdZs2YNzZs3v227oqKiGD16NAChoaHMmTOHzZs306pVKzZu3MiRI0fYsmULfn5+AEyYMIFWrVrdts6JEycyduzYwsQihBBC3JGu6wwcOJDU1FQ2bdpkl+PZhbA30rFwYDExMcybNw+Ay5cvM3fuXNq2bUtSUhKBgYF8/vnnzJo1iyNHjpCVlUVubm6+R7UHBQWZOxUA/v7+nD9/3qLMV199xfnz50lMTKRhw4Z3bNd/byf/u87U1FQCAgLMnQqARo0a3bHO+Ph4Xn31VfPrzMxMAgICMKHjdMejhTWZ0DmsXZQVchSQ7NWQ3NUxoePn52f1i35d1xk0aBA7d+5k8+bN+Pj4WLV+R2AwGEoke3Fn9py9/bVIWI2HhwchISGEhITQsGFDPvroI65cucKCBQvYsWMHvXv3pl27dqxdu5bffvuNN998kxs3bljUUapUKYvXmqblmyz0wAMPUKFCBRYuXFio8X6FqbOoXF1d8fb2tthAVoVSQdfgvJYl2Ssg2ashuauja+Dr62v1ZTcHDx5MYmIiGzdupEyZMlat21FomlYi2Ys7s+fspWNxH9E0DYPBwLVr19i+fTuBgYG8+eabNGjQgNDQUI4fP35X9QYHB/Pjjz+yatUqhgwZUqw2hoeHc/LkSc6dO2fet2vXrruuT1ZpsT2DrlHPVFmyV0CyV0NyV8ega/z5559WXR3n+PHjzJ07l9TUVAIDA/H09MTT05MXXnjBaudwBCaTyerZi8Kx5+xlKJQDy87O5uzZs8DNoVBz5swhKyuLDh06kJmZyYkTJ1i+fDkNGzbk22+/5Ztvvrnrc4WFhfHjjz/SokULnJ2dmTFjxl3V06pVK4KDg+nbty+TJ0/mn3/+Mc8FuZueufw3b3saUJpSkr0Ckr0akrs6GnDjxg2rro4TGBhol6vt2Btd162evSgce85e7lg4sHXr1uHv74+/vz+NGzdm165dfPnll7Ro0YKOHTvyyiuvMHjwYOrVq8f27dsZNWpUsc4XHh7ODz/8wGeffVaolZwK4uTkxMqVK8nKyqJhw4b069ePN998EwA3N7ditU8IIYQQQpQcTbfH7o4Q/5KYmMjDDz/M4cOHCQ4OLtQxmZmZ+Pj4EL18EJqHSwm3UPybk67RWK/GTu0ERk3+ebElyV4NyV0dJ11jfmh/QkNDcXKSpTpsyWg0kpaWJtkrYOvs866pMjIy8i3y818yFErYnW+++QZPT09CQ0M5fPgwL730EtHR0YXuVPybEV1+yG3MiM4B7RxGWSHH5iR7NSR3dYzoVK1a1S5Xx3F0BoNBslfEnrOXay5hd/755x9ee+01Tpw4Qfny5WnZsiVTp069q7rWt514x961EEIIIYpG0zTzs7KEbdlz9vbX1RH3vaeffppDhw5x/fp1Tp06RUJCgvlp4UVlNBqt3DpxJ0ajkUOHDkn2Ckj2akju6kj26kj26thz9tKxEEJYnT0ugXe/kOzVkNzVkezVkezVsdfspWMhhBBCCCGEKDaZYyEcWocNo2RVKBszr5CTtkBWyLExyV4NyV2dvFWhhBD2Qe5YCIcmq7TYnhGdZO20ZK+AZK+G5K6OEZ3q1avb5eo4js5gMEj2ithz9vbXIiHEPS+bXNVNuG9J9mpI7uo4O8vgC1Uke3XsNXvpWIh7wrFjx9A0jeTk5CId54RWMg0St+TEzWEhkr3tSfZqSO7qOKGRlpZm1Yms2dnZ9O/fn+rVq+Pl5UXNmjVZuHCh1ep3FCaTyerZi8Kx5+ylYyEsaJp2223MmDGqmyiEEEKUmNzcXPz9/dm0aROZmZkkJCQwbNgwNmzYoLppQtg9+7yPIpQ5c+aM+c+ff/45b7/9NqmpqeZ9/34gi67rGI1Gu70dJ4QQQhSVh4cH48aNM79u0qQJMTExbNu2jdatWytsmRD2T+5YCAt+fn7mzcfHB03TzK8PHjyIl5cX33//PQ8++CCurq5s27aNI0eO0KlTJypVqoSnpycNGzZk06ZN5jrfeOMNGjdunO9cdevWtfjH+6OPPiIiIgI3Nzdq1qzJ3LlzbfKZhRBCiFu5fv06SUlJREVFqW6KEHZPOhaiyF5//XXee+89UlJSiIqKIisri3bt2rF582Z+++032rRpQ4cOHThx4gQAvXv3JikpiSNHjpjr+OOPP9i3bx//93//B8DSpUt5++23mTBhAikpKbz77ruMGjWKxYsXF6pN2dnZZGZmWmwgq0KpYERnp3ZCsldAsldDclfHiE5oaGiJrY6j6zr9+vUjNDSUrl27lsg57lUGg6FEsxe3Zs/Z21+LhN0bN24crVq1Ijg4mLJly1K3bl0GDBhA7dq1CQ0N5Z133iE4OJjVq1cDUKtWLerWrcuyZcvMdSxdupTGjRsTEhICwOjRo5k6dSpdu3alevXqdO3alVdeeYUPP/ywUG2aOHEiPj4+5i0gIMD6H1wUmquMslRGsldDclcnN7dkVuTSdZ2BAweSmprKypUr7fIiTrWSyl7cmb1mL78losgaNGhg8TorK4vhw4cTERGBr68vnp6epKSkmO9YwM27FnkdC13X+eyzz+jduzcAV65c4ciRIzz33HN4enqat/Hjx1vc5bid+Ph4MjIyzNvJkycBWRVKBSc06umVJXsFJHs1JHd1nNA4evSo1VfH0XWdQYMGsXPnTjZs2ICPj49V63cEJpOpRLIXd2bP2ctXLKLIPDw8LF4PHz6cjRs3MmXKFEJCQnB3d6d79+7cuHHDXKZXr1689tpr7Nmzh2vXrnHy5EmefPJJ4GbHBGDBggX55mI4OTkVqk2urq64uroW52MJIYQQAAwePJjExER++OEHypQpo7o5QtwzpGMhii0xMZG4uDi6dOkC3OwoHDt2zKJM1apVad68OUuXLuXatWu0atWKihUrAlCpUiUqV67Mn3/+ab6LIYQQQqhw/Phx5s6di6urK4GBgeb9Tz31FPPnz1fYMiHsn3QsRLGFhoayYsUKOnTogKZpjBo1qsDbc71792b06NHcuHGD6dOnW7w3duxYhg4dio+PD23atCE7O5vdu3dz+fJlXn31VVt9FGEludjf7dn7hWSvhuSujrXnPgQGBqLrMhG/MGTeiTr2mr19tkrcU6ZNm0aZMmV46KGH6NChA7GxsdSvXz9fue7du3Px4kWuXr1K586dLd7r168fH330EYsWLaJOnTo0b96chIQEqlevXqy2GTX5z8HWjJpOkuGkZK+AZK+G5K6OUdMJCwsr9LBZYT1OTk6SvSL2nL2mS7dcOKDMzEx8fHxosnwgzh4y98KmdPDFjXSuI3NZbUyyV0NyV0eH72PG4eHhgaZJ+Lak6zpXrlyR7BWwdfZ511QZGRl4e3vftqzcsRAOTVZpsT0nNCL1SpK9ApK9GpK7Ok5onDp1yi5Xx3F0JpNJslfEnrOXORbCoa1p/Y6s6GFjRqORtLQ03g0NtcvbtI5MsldDclcnL3shhH2QOxZCCCGEEEKIYpOOhXBoMu7T9jRNw8XFRbJXQLJXQ3JXR7JXR7JXx56zl8nbwiEVZaKREEIIIYQoWFGuqWSOhXBobb6Px0lWhbIpTYcKePI3Wej292WKQ9N0WP3I2/j4+NjlN1mOStd1MjIyJHcFJHt1JHt17Dl7GQolHJpBVmmxOQMaIXo5yV4BAxpnz561y5VCHJnJZJLcFZHs1ZHs1bHn7KVjIYQQQgghhCi2e65joWkaK1euVN0M4uLi8j092t7ZQ3ZjxoyhXr16StsghCi8OXPm0KBBA1xdXe+5f/OEEELYltKORVxcHJqm5dvatGmjslkWjh07hqZpJCcnW+yfOXMmCQkJJX7+oKAgZsyYkW//3VygnzlzhrZt21qnYXdp+PDhbN682fy6pDtosjKB7elAOtckewV0sPqTWCtXrsxbb71F//79rVano9E0TZ4+rIhkr45kr449Z6988nabNm1YtGiRxT5XV/ufbOvj46O6CUXm5+dXovUbjUY0TcNguHV/1dPTE09PzxJtx7+ZNP3euy13jzNpOge086qbcV8yaToBAQFWrbNr164AJCcnc+rUKavW7SgMBoPVcxeFI9mrI9mrY8/ZK7/mcnV1xc/Pz2LLe1JyWloazZo1w83NjcjISDZu3Ghx7JYtW9A0jfT0dPO+5ORkNE3j2LFj5n2JiYm0aNGC0qVLU6ZMGWJjY7l8+TIA69at4+GHH8bX15dy5crRvn17jhw5Yj62evXqADzwwANomkaLFi2A/N+0Z2dnM3ToUCpWrIibmxsPP/wwu3btytfWzZs306BBA0qXLs1DDz1EamqqNWKkRYsWDB06lJEjR1K2bFn8/PwYM2aMRZl/D4V66KGHeO211yze//vvvylVqhQ///yz+TMNHz6cKlWq4OHhQePGjdmyZYu5fEJCAr6+vqxevZrIyEhcXV05ceIEW7ZsoVGjRnh4eODr60t0dDTHjx8HLO+0jBkzhsWLF7Nq1Srz3aotW7bw6KOPMnjw4Hxtc3FxsbjbURiafG1uc5oOAbqPZK+ApsOFCxfsckKfIzOZTJK7IpK9OpK9OvacvfKOxa2YTCa6du2Ki4sLO3fuZP78+fkuhAsjOTmZxx57jMjISHbs2MG2bdvo0KEDRqMRgCtXrvDqq6+ye/duNm/ejMFgoEuXLua/rKSkJAA2bdrEmTNnWLFiRYHnGTlyJF9//TWLFy9mz549hISEEBsby6VLlyzKvfnmm0ydOpXdu3fj7OzMs88+a34vb9jVvy/ei2Lx4sV4eHiwc+dOJk+ezLhx4/J1xvL07t2b5cuX8+/HmHz++edUrlyZRx55BIDBgwezY8cOli9fzr59+3jiiSdo06YNaWlp5mOuXr3KpEmT+Oijj/jjjz8oW7YsnTt3pnnz5uzbt48dO3bw/PPPF3i7bvjw4fTo0YM2bdpw5swZzpw5w0MPPUS/fv1YtmwZ2dnZ5rKffvopVapU4dFHHy3w82RnZ5OZmWmxgawKpYIBjQDdV7JXwIDGhQsXkMcT2Zau65K7IpK9OpK9OvacvfKhUGvXrs03NOaNN96gQYMGHDx4kPXr11O5cmUA3n333SLPEZg8eTINGjRg7ty55n21atUy/7lbt24W5RcuXEiFChU4cOAAtWvXpkKFCgCUK1fulkOJrly5wrx580hISDC3b8GCBWzcuJGPP/6YESNGmMtOmDCB5s2bA/D666/z+OOPc/36ddzc3ChVqhTh4eGULl26SJ8xT1RUFKNHjwYgNDSUOXPmsHnzZlq1apWvbI8ePXj55ZfZtm2buSOxbNkyevXqhaZpnDhxgkWLFnHixAlz/sOHD2fdunUsWrSId999F4CcnBzmzp1L3bp1Abh06RIZGRm0b9+e4OBgACIiIgpsr6enJ+7u7mRnZ1tk27VrVwYPHsyqVavo0aMHcPPuSN6cnIJMnDiRsWPHFjkzIYQQQghhHcrvWMTExJCcnGyxvfDCC6SkpBAQEGC+qAVo2rRpkevPu2NxK2lpafTq1YsaNWrg7e1NUFAQACdOnCj0OY4cOUJOTg7R0dHmfaVKlaJRo0akpKRYlI2KijL/2d/fH4Dz52+OR69SpQoHDx6kUaNGhT73rerOqz+v7v+qUKECrVu3ZunSpQAcPXqUHTt20Lt3bwD279+P0WgkLCzMPC/C09OTn376yWKomIuLi8V5y5YtS1xcHLGxsXTo0IGZM2dy5syZIn0ONzc3+vTpw8KFCwHYs2cPv//+O3Fxcbc8Jj4+noyMDPN28uTJIp1TCCGEEEIUj/I7Fh4eHoSEhNzVsXmThP99KygnJ8eijLu7+23r6NChA4GBgSxYsIDKlStjMpmoXbs2N27cuKs23UmpUqXMf8779v12Y+S8vb3JyMjItz89PT3fBPJ/151X/+3q7t27N0OHDmX27NksW7aMOnXqUKdOHQCysrJwcnLi119/xcnJyeK4f99hcnd3z3cXYdGiRQwdOpR169bx+eef89Zbb7Fx40aaNGlyy7b8V79+/ahXrx6nTp1i0aJFPProowQGBt6yvKura4GT/nWQATk2pgPntCxZFUoBHaz+JNbc3FzzZjKZuH79OgaDARcXF6ud416naZpdPgH3fiDZqyPZq2PP2Su/Y3ErERERnDx50uLb7l9++cWiTN4wpX+X+e+ysFFRUbec8Hvx4kVSU1N56623eOyxx4iIiDBP6s6T959n3pyMggQHB+Pi4kJiYqJ5X05ODrt27SIyMvI2n/LOwsPD+fXXX/Pt37NnD2FhYcWqu1OnTly/fp1169axbNky890KuDlZ3Wg0cv78eUJCQiy2wqwu9cADDxAfH8/27dupXbs2y5YtK7Cci4tLgdnWqVOHBg0asGDBApYtW2YxF6UoTDKD2OZMms4R7aJkr4BJ0/H397/tymxFNX78eNzd3ZkwYQJr1qzB3d2d1q1bW61+R2AwGKyeuygcyV4dyV4de85eeYuys7M5e/asxXbhwgVatmxJWFgYffv2Ze/evWzdupU333zT4tiQkBACAgIYM2YMaWlpfPvtt0ydOtWiTHx8PLt27WLgwIHs27ePgwcPMm/ePC5cuECZMmUoV64c//vf/zh8+DA//PADr776qsXxFStWxN3dnXXr1nHu3LkC7x54eHjw4osvMmLECNatW8eBAwfo378/V69e5bnnnit0Fn/99Rc1a9Y0TxgHeOWVV/j222+ZMGECKSkp/P7777z55pvs2LGDl156qdB1F8TDw4POnTszatQoUlJS6NWrl/m9sLAwevfuzdNPP82KFSs4evQoSUlJTJw4kW+//faWdR49epT4+Hh27NjB8ePH2bBhA2lpabecZxEUFMS+fftITU3lwoULFnec+vXrx3vvvYeu63Tp0uWuPqNBt7/evKMz6BrBejnJXgGDrnHmzBmrrhQyZswYdF232O52gQlHZTKZrJ67KBzJXh3JXh17zl55x2LdunX4+/tbbA8//DAGg4FvvvmGa9eu0ahRI/r168eECRMsji1VqhSfffYZBw8eJCoqikmTJjF+/HiLMmFhYWzYsIG9e/fSqFEjmjZtyqpVq3B2dsZgMLB8+XJ+/fVXateuzSuvvML7779vcbyzszOzZs3iww8/pHLlynTq1KnAz/Hee+/RrVs3+vTpQ/369Tl8+DDr1683L51bGDk5OaSmpnL16lXzvoceeojvv/+e77//nujoaFq0aMH27dvZvHkztWvXLnTdt9K7d2/27t3LI488QrVq1SzeW7RoEU8//TTDhg0jPDyczp07s2vXrnzl/q106dIcPHiQbt26ERYWxvPPP8+gQYMYMGBAgeX79+9PeHg4DRo0oEKFChZ3fXr16oWzszO9evXCzc3trj6fXNrangZU0j0lewU0ICMjwy5XCnFkuq5L7opI9upI9urYc/aabo+tEoKby+8GBweza9cu6tevX6RjMzMz8fHxIXr5IDQPGQtuS066RmO9Gju1ExhlOJRNOeka80P7Exoamm9ulCg5RqORtLQ0yV0ByV4dyV4dW2efd02VkZGBt7f3bcsqn7wtxH/l5ORw8eJF3nrrLZo0aVLkToUQQgghhLA96VgIu5OYmEhMTAxhYWF89dVXxaprbex4fH19rdMwUSgmk4lLly5RtmxZu5xY5sjysrfHlUIcmaZplC9fXnJXQLJXR7JXx56zL/RQqH379hW60v8+T0EIWyvKbTshhBBCCFGwEhkKVa9ePTRNu+VEkbz3NE277dKsQtiSPa6Y4OhMJhN//fUXVapUkTsWNibZqyG5qyPZqyPZq2PP2Re6Y3H06NGSbIcQJULWJrA9Xde5cuWKZK+AZK+G5K6OZK+OZK+OPWdf6I7F7Z56LIS96rBhlKwKZWPmVaHSFsiqUDaWtyqUEEIIoUKhOxarV68udKUdO3a8q8YIIYQQQggh7k2F7lh07ty5UOVkjoWwJyZ0ZHVt2zKhc1i7iAm5W2FrJnT8/PzsbsytozMYDJK7IpK9OpK9OvacfaFbZDKZCrVJp0IAxMXFFbozWpJ0+1uJzeHpGpzXsiR7BXQNfH19rboE4Zw5c2jQoAGurq528TttjzRNs3ruonAke3Uke3XsOXv76+oIq9I07bbbmDFjSuS8M2fOJCEhoUTqLgqDXN3anEHXqGeqLNkrYNA1/vzzT6uuhla5cmXeeust+veXuRu3YjKZrJ67KBzJXh3JXh17zr7QQ6FmzZrF888/j5ubG7Nmzbpt2aFDhxa7YcI6zpw5Y/7z559/zttvv01qaqp5n6enp1XPZzQa0TQNHx8fq9Z7t+TS1vY0oDSlJHsFNODGjRtWXSmka9euACQnJ3Pq1Cmr1etIdF23eu6icCR7dSR7dew5+0LfsZg+fTpXrlwx//lW24wZM0qqreIu+Pn5mTcfHx80TTO/rlixItOmTaNq1aq4urpSr1491q1bZz52y5YtaJpGenq6eV9ycjKapnHs2DEAEhIS8PX1ZfXq1URGRuLq6sqJEyfyDYX66quvqFOnDu7u7pQrV46WLVuaf57yyr777rtUqlQJX19fxo0bR25uLiNGjKBs2bJUrVqVRYsW2SIyIYQQQghxF+7qORbyTAvHMHPmTKZOncqHH37IAw88wMKFC+nYsSN//PEHoaGhha7n6tWrTJo0iY8++ohy5cpRsWJFi/fPnDlDr169mDx5Ml26dOGff/5h69atFj3tH374gapVq/Lzzz+TmJjIc889x/bt22nWrBk7d+7k888/Z8CAAbRq1YqqVataLQMhhBBCCGEddzXH4vfff7/leytXrrzbtggbmzJlCq+99ho9e/YkPDycSZMmUa9evSLfdcrJyWHu3Lk89NBDhIeHU7p0aYv3z5w5Q25uLl27diUoKIg6deowcOBAi2FYZcuWZdasWYSHh/Pss88SHh7O1atXeeONNwgNDSU+Ph4XFxe2bdtWYBuys7PJzMy02ACMsjKRzRnROaCdk+wVMKJTtWpVu1wpxJEZDAbJXRHJXh3JXh17zv6uWhQbG1vgXYuvv/6a3r17F7tRouRlZmZy+vRpoqOjLfZHR0eTkpJSpLpcXFyIioq65ft169blscceo06dOjzxxBMsWLCAy5cvW5SpVauWxS9IpUqVqFOnjvm1k5MT5cqV4/z58wWeY+LEifj4+Ji3gICAm2/IQH/b0yBduy7Zq6DdnDdljyuFODJN0yR3RSR7dSR7dew5+7vqWPTr14+WLVty9uxZ877PP/+cp59+2i5WAhLWkXeh/+8hSzk5OfnKubu73/aH28nJiY0bN/L9998TGRnJ7NmzCQ8Pt+iclipVyuIYTdMK3HerFRDi4+PJyMgwbydPnrx5blmZyOacdI1GpgDJXgEnXePQoUNWXfY7NzeX69evk5ubi8lk4vr169y4ccNq9TsCo9Fo9dxF4Uj26kj26thz9nfVsRg7dizt2rWjZcuWXLp0iWXLlvHMM8+wZMkSnnjiCWu3UZQAb29vKleuTGJiosX+xMREIiMjAahQoQJgubJUcnLyXZ1P0zSio6MZO3Ysv/32Gy4uLnzzzTd31/gCuLq64u3tbbEJdZxlJWtlrL384Pjx43F3d2fChAmsWbMGd3d3WrdubdVzOAJ7XPbxfiHZqyPZq2Ov2Rd68vZ/zZ49m969e9OkSRP++usvPvvsMzp16mTNtokSNmLECEaPHk1wcDD16tVj0aJFJCcns3TpUgBCQkIICAhgzJgxTJgwgUOHDjF16tQin2fnzp1s3ryZ1q1bU7FiRXbu3Mnff/9NRESEtT+SEMLKxowZU2LPuxFCCOFYCt2xWL16db59Xbt2ZevWrfTq1QtN08xlOnbsaL0WihIzdOhQMjIyGDZsGOfPnycyMpLVq1ebV4QqVaoUn332GS+++CJRUVE0bNiQ8ePHF/mulLe3Nz///DMzZswgMzOTwMBApk6dStu2bUviYwkhhBBCCAU0vZBP1yjszHNN0+xyzJe4v2RmZuLj40OT5QNx9nBV3Zz7i37zAXlXyZEJ3Lamw6bWE3FxcbHLSX2OKu9hVZK77Un26kj26tg6+7xrqoyMjDsONS/0HQt7HcslhLA/2eSqbsJ9y9n5rke4imKQ3NWR7NWR7NWx1+yLNMNyx44drF271mLfkiVLqF69OhUrVuT5558nOzvbqg0Uojic5Ctzm3NCo7FeTbJXwAmNtLQ0+SLIxkwmk+SuiGSvjmSvjj1nX6TuztixY4mJiaF9+/YA7N+/n+eee464uDgiIiJ4//33qVy5skz0E3ZjTet3KFOmjOpm3FeMRiNpaWm8GxqKk5OT6ubcV/KyF0IIIVQo0h2LvXv38thjj5lfL1++nMaNG7NgwQJeffVVZs2axRdffGH1RgohhBBCCCHsW5E6FpcvX6ZSpUrm1z/99JPFyj4NGzY0P5hMCCGEEEIIcf8oUseiUqVK5qcl37hxgz179tCkSRPz+//880++pyULoVJhVzMT1mMwGAgNDZXsFZDs1ZDc1ZHs1ZHs1bHn7Is0x6Jdu3a8/vrrTJo0iZUrV1K6dGkeeeQR8/v79u0jODjY6o0U4m61WfeGLDdra7LcrDr/Wm5W2FZubq7krohkr45kr469Zl+krs4777yDs7MzzZs3Z8GCBSxYsMDiQy1cuJDWrVtbvZFC3C1Zmcj2nNCop1eW7BVwQuPo0aN2uVKIIzOZTJK7IpK9OpK9OvacfZE6FuXLl+fnn3/m8uXLXL58mS5duli8/+WXXzJ69GirNtBaxowZQ7169cyv4+Li6Ny5s7L2FNeWLVvQNI309PRi1RMUFMSMGTOK3Z4WLVrw8ssvF7seIYR9mTNnDg0aNMDV1fWe/jdTCCFEyburp2v4+PgUuL9s2bLFasytnD17lgkTJvDtt9/y119/UbFiRerVq8fLL79ssUrVvezatWtUqVIFg8HAX3/9haurbYbv7Nq1Cw8Pj2LXs2LFCplfI4QDqly5Mm+99RabNm3i1KlTqpsjhBDCjtnnY/v+5dixY0RHR+Pr68v7779PnTp1yMnJYf369QwaNIiDBw+qbqJVfP3119SqVQtd11m5ciVPPvmkTc5boUIFq9RTUp1KcW/Kxf5uz94vrD2Zr2vXrgAkJydLx+I27HES5f1CsldHslfHXrO3z1b9y8CBA9E0jaSkJLp160ZYWBi1atXi1Vdf5ZdffjGXO3HiBJ06dcLT0xNvb2969OjBuXPnCn0ek8nExIkTqV69Ou7u7tStW5evvvrKoszq1asJDQ3Fzc2NmJgYFi9enG840rZt23jkkUdwd3cnICCAoUOHcuXKlTue/+OPP+app57iqaee4uOPP873/nfffUdYWBju7u7ExMRw7Ngxi/cTEhLw9fVl7dq1hIeHU7p0abp3787Vq1dZvHgxQUFBlClThqFDh2I0Gs3H/XsolK7rjBkzhmrVquHq6krlypUZOnSouezcuXPNn79SpUp0797d/N5/h0JdvnyZp59+mjJlylC6dGnatm1r8eCuvPauX7+eiIgIPD09adOmDWfOnDGX2bJlC40aNcLDwwNfX1+io6M5fvz4HbP8N6OmF6m8KD6jppNkOCnZK2DUdMLCwuTBhDbm5OQkuSsi2asj2atjz9nbdcfi0qVLrFu3jkGDBhU4XMfX1xe42Sno1KkTly5d4qeffmLjxo38+eefRfrWf+LEiSxZsoT58+fzxx9/8Morr/DUU0/x008/AXD06FG6d+9O586d2bt3LwMGDODNN9+0qOPIkSO0adOGbt26sW/fPj7//HO2bdvG4MGDb3vuI0eOsGPHDnr06EGPHj3YunWrxQX0yZMn6dq1Kx06dCA5OZl+/frx+uuv56vn6tWrzJo1i+XLl7Nu3Tq2bNlCly5d+O677/juu+/45JNP+PDDD/N1mPJ8/fXXTJ8+nQ8//JC0tDRWrlxJnTp1ANi9ezdDhw5l3LhxpKamsm7dOpo1a3bLzxQXF8fu3btZvXo1O3bsQNd12rVrR05OjkV7p0yZwieffMLPP//MiRMnGD58OHBztYPOnTvTvHlz9u3bx44dO3j++efRtCJOCJZrW9vTwVd3k+xV0CErKwtdl/BtSdd1yV0RyV4dyV4de87erodCHT58GF3XqVmz5m3Lbd68mf3793P06FECAgIAWLJkCbVq1WLXrl00bNjwtsdnZ2fz7rvvsmnTJpo2bQpAjRo12LZtGx9++CHNmzfnww8/JDw8nPfffx+A8PBwfv/9dyZMmGCuZ+LEifTu3dv8zX1oaCizZs2iefPmzJs3Dzc3twLPv3DhQtq2bUuZMmUAiI2NZdGiRYwZMwaAefPmERwczNSpU83n3r9/P5MmTbKoJycnx1wWoHv37nzyySecO3cOT09PIiMjiYmJ4ccffyyw03XixAn8/Pxo2bIlpUqVolq1ajRq1Mj8noeHB+3bt8fLy4vAwEAeeOCBAj9PWloaq1evJjExkYceegiApUuXEhAQwMqVK3niiSfM7Z0/f765vYMHD2bcuHEAZGZmkpGRQfv27c3vR0REFHg+uPl3mJ2dbX6dmZkJyKpQKjihEalXYqd2AqP0LmzKCY1Tp04RGhpql99kOSqTySS5KyLZqyPZq2PP2dv1HYvC9sRSUlIICAgwdyoAIiMj8fX1JSUl5Y7HHz58mKtXr9KqVSs8PT3N25IlSzhy5AgAqamp+TooeRfdefbu3UtCQoJFHbGxseZlwQpiNBpZvHgxTz31lHnfU089RUJCgnkZsZSUFBo3bmxxXF4H6N9Kly5t8RyRSpUqERQUhKenp8W+8+fPF9iWJ554gmvXrlGjRg369+/PN998Q25uLgCtWrUiMDCQGjVq0KdPH5YuXcrVq1cLrCclJQVnZ2eLNpcrV47w8HCLv4//ttff39/ctrJlyxIXF0dsbCwdOnRg5syZFsOk/mvixIn4+PiYt3//LAghhBBCiJJn1x2L0NBQNE0r8QnaWVlZAHz77bckJyebtwMHDtxy2NCt6hkwYIBFHXv37iUtLe2WDw5cv349f/31F08++STOzs44OzvTs2dPjh8/zubNm4v0Of67KpOmaQXuu9W6xwEBAaSmpjJ37lzc3d0ZOHAgzZo1IycnBy8vL/bs2cNnn32Gv78/b7/9NnXr1i3WcrcFte3fnclFixaxY8cOHnroIT7//HPCwsIs5tX8W3x8PBkZGebt5MmTd90uIcT/Lzc3l+vXr5Obm4vJZOL69evcuHFDdbOEEELYIbvuWJQtW5bY2Fg++OCDAidA513URkREcPLkSYuLyQMHDpCenk5kZOQdzxMZGYmrqysnTpwgJCTEYsv75js8PJzdu3dbHLdr1y6L1/Xr1+fAgQP56ggJCbnl0xE//vhjevbsadEZSU5OpmfPnuZJ3BERESQlJVkcd6sL7OJyd3enQ4cOzJo1iy1btrBjxw72798PgLOzMy1btmTy5Mns27ePY8eO8cMPP+SrIyIigtzcXHbu3Gned/HiRVJTUwv19/FvDzzwAPHx8Wzfvp3atWuzbNmyAsu5urri7e1tsYEM81dBB66SI9kroAMuLi5Fn4t0G+PHj8fd3Z0JEyawZs0a3N3d5UGo/6FpmtVzF4Uj2asj2atjz9nbdccC4IMPPsBoNNKoUSO+/vpr0tLSSElJYdasWebhQC1btqROnTr07t2bPXv2kJSUxNNPP03z5s1p0KDBHc/h5eXF8OHDeeWVV1i8eDFHjhxhz549zJ49m8WLFwMwYMAADh48yGuvvcahQ4f44osvSEhIADD/xb722mts376dwYMHk5ycTFpaGqtWrbrl5O2///6bNWvW0LdvX2rXrm2xPf3006xcuZJLly7xwgsvkJaWxogRI0hNTWXZsmXmc1tTQkICH3/8Mb///jt//vknn376Ke7u7gQGBrJ27VpmzZpFcnIyx48fZ8mSJZhMJsLDw/PVExoaSqdOnejfvz/btm1j7969PPXUU1SpUoVOnToVqi1Hjx4lPj6eHTt2cPz4cTZs2EBaWtpt51kUxCQrE9mcSdNJNpyW7BUwaTo1atSw6jKEY8aMQdd1i23Lli1Wq98RGAwGq+cuCkeyV0eyV8ees7e/Fv1HjRo12LNnDzExMQwbNozatWvTqlUrNm/ezLx584CbF/arVq2iTJkyNGvWjJYtW1KjRg0+//zzQp/nnXfeYdSoUUycOJGIiAjatGnDt99+S/Xq1QGoXr06X331FStWrCAqKop58+aZV4XKe5hdVFQUP/30E4cOHeKRRx7hgQce4O2336Zy5coFnnPJkiV4eHgU+JC/xx57DHd3dz799FOqVavG119/zcqVK6lbty7z58/n3XffLVKOheHr68uCBQuIjo4mKiqKTZs2sWbNGsqVK4evry8rVqzg0UcfJSIigvnz5/PZZ59Rq1atAutatGgRDz74IO3bt6dp06bous53331X6IfolS5dmoMHD5qXGH7++ecZNGgQAwYMKNJnkmtb29N0qKh7SvYKaPrNO7n2uFKII9N1XXJXRLJXR7JXx56z13R7bNU9YsKECcyfP1/G89uhzMxMfHx8iF4+CM2j4GFoomQ46RqN9Wo3V4WS3oVNOeka80P72+VKIY7MaDSSlpYmuSsg2asj2atj6+zzrqkyMjLMQ81vxa6Xm7U3c+fOpWHDhpQrV47ExETef//9Oz6jQgghhBBCiPuBdCyKIC0tjfHjx3Pp0iWqVavGsGHDiI+PV90sIYQQQgghlJOhUMIh5d22u3z5svkJ7cI2TCYTf/31F1WqVLHLiWWOTLJXQ3JXR7JXR7JXx9bZF2UolHQshEMqyi+BEEIIIYQoWFGuqaSLKRzarR4GKEqOyWTiwoULkr0Ckr0akrs6kr06kr069py9dCyEQ5Mbcran6zoXLlyQ7BWQ7NWQ3NWR7NWR7NWx5+xl8rZwaB02jJLlZm3MvNxs2gJZbtbG8pabFUIIIVSQOxZCCCGEEEKIYpOOhbC6Y8eOoWkaycnJqpuCfF9uezpwTsuS7BXQAR8fHzRNs1qdc+bMoUGDBri6utK5c2er1etINE2zeu6icCR7dSR7dew5e+lYFMHff//Niy++SLVq1XB1dcXPz4/Y2FgSExNL/NxBQUHMmDGjWHWMGTOGevXq5dtvTx0BazPJUBybM2k6R7SLkr0CJk3H39/fqssPVq5cmbfeeov+/WWI1a0YDAar5y4KR7JXR7JXx56zt78W2bFu3brx22+/sXjxYg4dOsTq1atp0aIFFy9eLLFz3rhxo8Tqvh8YdPvrzTs6g64RrJeT7BUw6Bpnzpyx6kohXbt2pXPnzpQvX95qdToak8lk9dxF4Uj26kj26thz9tKxKKT09HS2bt3KpEmTiImJITAwkEaNGhEfH0/Hjh2Bm7em5s2bR9u2bXF3d6dGjRp89dVXFvXs37+fRx99FHd3d8qVK8fzzz9PVlaW+f24uDg6d+7MhAkTqFy5MuHh4bRo0YLjx4/zyiuvoGma+dbX8ePH6dChA2XKlMHDw4NatWrx3XffWeXz/vTTTzRq1AhXV1f8/f15/fXXyc3NNb9vMpmYPHkyISEhuLq6Uq1aNSZMmFBgXUajkWeffZaaNWty4sQJAFatWkX9+vVxc3OjRo0ajB071lz/s88+S/v27S3qyMnJoWLFinz88cdF+hxyaWt7GlBJ95TsFdCAjIwMu1wpxJHpui65KyLZqyPZq2PP2UvHopA8PT3x9PRk5cqVZGdn37LcqFGj6NatG3v37qV379707NmTlJQUAK5cuUJsbCxlypRh165dfPnll2zatInBgwdb1LF582ZSU1PZuHEja9euZcWKFVStWpVx48Zx5swZzpw5A8CgQYPIzs7m559/Zv/+/UyaNAlPT09zPUFBQYwZM6bIn/Wvv/6iXbt2NGzYkL179zJv3jw+/vhjxo8fby4THx/Pe++9x6hRozhw4ADLli2jUqVK+erKzs7miSeeIDk5ma1bt1KtWjW2bt3K008/zUsvvcSBAwf48MMPSUhIMHdM+vXrx7p168yfE2Dt2rVcvXqVJ598ssifRwghhBBClDxZbraQnJ2dSUhIoH///syfP5/69evTvHlzevbsSVRUlLncE088Qb9+/QB455132LhxI7Nnz2bu3LksW7aM69evs2TJEjw8PICbEyM7dOjApEmTzBfmHh4efPTRR7i4/P/LpDo5OeHl5YWfn59534kTJ+jWrRt16tQBoEaNGhZtDg4Ozjd8Yf/+/RadD8j/rIe5c+cSEBDAnDlz0DSNmjVrcvr0aV577TXefvttrly5wsyZM5kzZw59+/Y1n+vhhx+2qCcrK4vHH3+c7OxsfvzxR3x8fAAYO3Ysr7/+uvnYGjVq8M477zBy5EhGjx7NQw89RHh4OJ988gkjR44EYNGiRTzxxBP52p4nOzvbosOXmZlZYDkhhBBCCFEy5I5FEXTr1o3Tp0+zevVq2rRpw5YtW6hfvz4JCQnmMk2bNrU4pmnTpuY7FikpKdStW9fcqQCIjo7GZDKRmppq3lenTh2LTsWtDB06lPHjxxMdHc3o0aPZt2+fxfubN2/OdzckPDyc5ORki+2/w6dSUlJo2rSpxWoD0dHRZGVlcerUKVJSUsjOzuaxxx67bft69erFlStX2LBhg7lTAbB3717GjRtnvgvk6elJ//79OXPmDFevXgVu3rVYtGgRAOfOneP777/n2WefveW5Jk6ciI+Pj3kLCAgAwCRrE9mcCZ2TWrpkr4AJnfLly9vlSiGOTNM0yV0RyV4dyV4de85eOhZF5ObmRqtWrRg1ahTbt28nLi6O0aNHW/Uc/+543E6/fv34888/6dOnD/v376dBgwbMnj37tse4uLgQEhJisQUGBhapfe7u7oUq165dO/bt28eOHTss9mdlZTF27FiLzs3+/ftJS0vDzc0NgKeffpo///yTHTt28Omnn1K9enUeeeSRW54rPj6ejIwM83by5EkAZP6w7ekanNQyJHsFdA3Kly9v1ZVCcnNzuX79Orm5uZhMJq5fvy6LSvyHwWCweu6icCR7dSR7dew5e/tr0T0mMjKSK1eumF//8ssvFu//8ssvREREABAREcHevXstyicmJmIwGAgPD7/teVxcXDAajfn2BwQE8MILL7BixQqGDRvGggULivNxzO3csWOHxRCpxMREvLy8qFq1KqGhobi7u7N58+bb1vPiiy/y3nvv0bFjR3766Sfz/vr165OampqvgxMSEmL+JSlXrhydO3dm0aJFJCQk8Mwzz9z2XK6urnh7e1tsIKtCqWDQNSJNFSV7BQy6xsmTJ626Usj48eNxd3dnwoQJrFmzBnd3d1q3bm21+h2ByWSyeu6icCR7dSR7dew5e+lYFNLFixd59NFH+fTTT9m3bx9Hjx7lyy+/ZPLkyXTq1Mlc7ssvv2ThwoUcOnSI0aNHk5SUZB6O1Lt3b9zc3Ojbty+///47P/74I0OGDKFPnz4FTnz+t6CgIH7++Wf++usvLly4AMDLL7/M+vXrOXr0KHv27OHHH380d2IAHnvsMebMmVPkzzpw4EBOnjzJkCFDOHjwIKtWrWL06NG8+uqrGAwG3NzceO211xg5ciRLlizhyJEj/PLLLwWu2DRkyBDGjx9P+/bt2bZtGwBvv/02S5YsYezYsfzxxx+kpKSwfPly3nrrLYtj+/Xrx+LFi0lJSTHPxygqubS1PQ3wxV2yV0Dj5iIR1lwpZMyYMei6brFt2bLFavU7Al3XrZ67KBzJXh3JXh17zl4mbxeSp6cnjRs3Zvr06Rw5coScnBwCAgLo378/b7zxhrnc2LFjWb58OQMHDsTf35/PPvuMyMhIAEqXLs369et56aWXaNiwIaVLl6Zbt25MmzbtjucfN24cAwYMIDg4mOzsbHRdx2g0MmjQIE6dOoW3tzdt2rRh+vTp5mOOHDli7oQURZUqVfjuu+8YMWIEdevWpWzZsjz33HMWF/6jRo3C2dmZt99+m9OnT+Pv788LL7xQYH0vv/wyJpOJdu3asW7dOmJjY1m7di3jxo1j0qRJlCpVipo1a5onvedp2bIl/v7+1KpVi8qVKxf5cwghhBBCCNvRdHvs7tyjNE3jm2++oXPnzqqb4hCysrKoUqUKixYtomvXrkU6NjMzEx8fH6KXD0LzuPNEeGE9TrpGY70aO7UTGOXp2zblpGvMD+1PaGgoTk5Oqptz3zAajaSlpUnuCkj26kj26tg6+7xrqoyMDPNQ81uROxbC7phMJi5cuMDUqVPx9fU1P4DwrupCR/65sy0TOoe1i7IqlAImdPz8/OxyQp8jMxgMkrsikr06kr069py9dCyE3Tlx4gTVq1enatWqJCQk4Ox89z+mMn/Y9nQNzpN154LC6nQNfH19VTfjvqNpmuSuiGSvjmSvjj1nL0OhhEPKu213+fJlu/3lc1Qmk4ljx44RFBRkl9+mODLJXg3JXR3JXh3JXh1bZ1+UoVDykyAcmvSbbU/XdW7cuCHZKyDZqyG5qyPZqyPZq2PP2UvHQgghhBBCCFFs0rEQQgghhBBCFJtM3hYOrd2Gt3D2cFXdjPuLDr64kZ52XZ5QaGs6fB8zTsY725jBYKBq1aqSuwKSvTqSvTr2nL10LIRjkwtb29MgneuqW3F/0m4+zFPYlqZpkrsikr06kr069py9/XV1hLAiJ1lv1uacdI1GpgDJXgEnXePQoUMYjUar1TlnzhwaNGiAq6urPPzzFoxGo9VzF4Uj2asj2atjz9lLx0KY/f3337z44otUq1YNV1dX/Pz8iI2NJTExscTPHRQUxIwZM0r8PMI2nOWfFmVMJpNV66tcuTJvvfUW/fv3t2q9jsbauYvCk+zVkezVsdfsZSiUMOvWrRs3btxg8eLF1KhRg3PnzrF582YuXrxYYue8ceMGLi4uJVa/EKJ4unbtCkBycjKnTp1S3BohhBD2TL5WFACkp6ezdetWJk2aRExMDIGBgTRq1Ij4+Hg6duwI3BzTN2/ePNq2bYu7uzs1atTgq6++sqhn//79PProo7i7u1OuXDn+v/buPC6qev8f+OsMyDCA4IYCieKChAtuaCGWmgtYWaSVdr1+9bqUW2aaW26gIurVLHevlWilds2ltNKQxAw1TQU1ERFxK8xrKggGwpzP7w8v59dcUEHG+RyH1/PxOI8Hc+Ys73k1Tuczn/P5zOuvv46cnP//K8wDBgxAREQEoqOj4ePjg4CAAHTs2BHnz5/H22+/DUVRoCh3bqE5f/48evTogapVq8LV1RVNmjTBN998Y7tQiIiIiKjU2LAgAHcGfLq5uWHr1q3Iz8+/63ZTp05Fr169kJycjL59+6JPnz5ISUkBAOTm5iIsLAxVq1bFoUOHsHHjRuzatQsjR460OEZ8fDxSU1MRFxeH7du3Y/PmzahduzZmzJiBzMxMZGZmAgBGjBiB/Px8/PDDDzh+/Djmzp1b5sFKZujvx2PsnRkCScpvzF4CMwTq1auny5lC7JnBYGDukjB7eZi9PHrOnrdCEQDA0dERsbGxGDJkCFasWIFWrVqhQ4cO6NOnD4KCgrTtXnnlFQwePBgAMHPmTMTFxWHx4sVYtmwZ1q1bh7y8PKxduxaurq4A7gz87NGjB+bOnYtatWoBAFxdXfHhhx9a3ALl4OCAypUrw8vLS1t34cIF9OrVC82aNQMA1K9f/6715+fnWzSIsrOzrZAKPah8FMouocJydOTHugzMXR5mLw+zl0ev2euvqUPS9OrVC7/99hu++uorhIeHIyEhAa1atUJsbKy2TUhIiMU+ISEhWo9FSkoKmjdvrjUqACA0NBSqqiI1NVVb16xZs1KNqxg1ahRmzZqF0NBQTJ8+HceOHbvrtjExMfDw8NAWX19fAIAD55u1OQcoeELUYfYSOEBBWlqabgf12StVVZm7JMxeHmYvj56zZ8OCLDg7O6Nr166YOnUq9u3bhwEDBmD69OlWPcdfGx73MnjwYJw9exb9+vXD8ePHERwcjMWLF5e47aRJk5CVlaUtFy9etGbJRBVWYWEh8vLyUFhYCFVVkZeXh9u3b8sui4iIdIgNC7qnxo0bIzc3V3t84MABi+cPHDiAwMBAAEBgYCCSk5Mttk9MTITBYEBAQMA9z+Pk5FTifMy+vr4YOnQoNm/ejLFjx2LVqlUl7m80GuHu7m6xEFH5zZo1CyaTCdHR0di2bRtMJhO6desmuywiItIhNiwIAPDHH3/gmWeewaeffopjx44hIyMDGzduxLx58/Diiy9q223cuBEff/wxTp8+jenTp+PgwYPa4Oy+ffvC2dkZ/fv3x4kTJ7B79268+eab6Nevnza+4m78/Pzwww8/4Ndff8XVq1cBAKNHj8bOnTuRkZGBI0eOYPfu3VojhohsIzIyEkIIiyUhIUF2WUREpEP6HPlBNufm5oYnnngCCxcuRHp6OgoKCuDr64shQ4bg3Xff1baLiorChg0bMHz4cHh7e2P9+vVo3LgxAMDFxQU7d+7EW2+9hTZt2sDFxQW9evXCe++9d9/zz5gxA2+88QYaNGiA/Px8CCFgNpsxYsQIXLp0Ce7u7ggPD8fChQvL9LrMEHyT25gZAj8pFzgrlARmCPj7++typhB7ZjAYmLskzF4eZi+PnrNXhBD8vz+ViqIo2LJlCyIiImSXcl/Z2dnw8PDAkxuGw9HVKLucikUALqiEWygAx2/bmAB2dYuBk5OT9nsw9PAJIbQf+2TutsXs5WH28tg6+6JrqqysrPveaq6/pg6RFXFmIttzgIIWwofZS+AABRkZGbqcKcSeqarK3CVh9vIwe3n0nD0bFkREREREVG68/ZxK7VG8a25bt5moWrWq7DIqFLPZjLS0NMz294eDg4PsciqUouyJiIhkYI8FEVmdHgeUVRTMXg7mLg+zl4fZy6PX7Dl4m+xSWQYaEREREVHJOHib6L/YbrY9IQRycnKYvQTMXg7mLg+zl4fZy6Pn7DnGguzaczsmQ3F1kl1GheIgFDwh6tz5LQtFfx969sxBKFjhPwT+HN9iU6qq4tKlS8xdAmYvD7OXR8/Zs8eCiIiIiIjKjQ0LO6YoCrZu3Sq7DAwYMOCR+FE9IipuyZIlCA4OhtFo5L9jIiK6JzYsHhEDBgyAoijFlvDwcNmlac6dOwdFUZCUlGSx/oMPPkBsbKyUmngjju0JALdQwOwlEIDVf4nVx8cHU6ZMwZAhQ6x2THujKAp/fVgSZi8Ps5dHz9lzjMUjJDw8HKtXr7ZYZzQaJVVTeh4eHtLOrSqCrWcbUxWBJOU32WVUSKoiUL9+fases2fPngCApKQkXLp0yarHthcGg8HquVPpMHt5mL08es6e11yPEKPRCC8vL4ul6Mff0tLS8PTTT8PZ2RmNGzdGXFycxb4JCQlQFAU3btzQ1iUlJUFRFJw7d05bl5iYiI4dO8LFxQVVq1ZFWFgYrl+/DgDYsWMH2rdvjypVqqB69ep4/vnnkZ6eru1br149AEDLli2hKAo6duwIoPitUPn5+Rg1ahRq1qwJZ2dntG/fHocOHSpWa3x8PIKDg+Hi4oJ27dohNTW1zJlx7LDtKQKoKdyYvQSKAG7cuKHLmULsmRCCuUvC7OVh9vLoOXs2LOyAqqro2bMnnJyc8NNPP2HFihWYMGFCmY+TlJSEzp07o3Hjxti/fz9+/PFH9OjRA2azGQCQm5uLMWPG4Oeff0Z8fDwMBgNeeuklqKoKADh48CAAYNeuXcjMzMTmzZtLPM/48eOxadMmrFmzBkeOHEHDhg0RFhaGa9euWWw3efJkLFiwAD///DMcHR0xcODAMr8mA/TXTWjvDFDQUFRn9hIYoODy5cvav0myDVVVmbskzF4eZi+PnrPnrVCPkO3bt8PNzc1i3bvvvovg4GCcOnUKO3fuhI+PDwBg9uzZ6N69e5mOP2/ePAQHB2PZsmXauiZNmmh/9+rVy2L7jz/+GJ6enjh58iSaNm0KT09PAED16tXh5eVV4jlyc3OxfPlyxMbGavWtWrUKcXFx+OijjzBu3Dht2+joaHTo0AEAMHHiRDz33HPIy8uDs7NzsePm5+cjPz9fe5ydnV2m105ERERE5cMei0dIp06dkJSUZLEMHToUKSkp8PX11RoVABASElLm4xf1WNxNWloaXnvtNdSvXx/u7u7w8/MDAFy4cKHU50hPT0dBQQFCQ0O1dZUqVULbtm2RkpJisW1QUJD2t7e3NwDgypUrJR43JiYGHh4e2uLr61vqmoiIiIio/Nhj8QhxdXVFw4YNH2hfg+FOG/Kv9+MVFBRYbGMyme55jB49eqBu3bpYtWoVfHx8oKoqmjZtitu3bz9QTfdTqVIl7e+imQ/u1u03adIkjBkzRnucnZ0NX19fCIA35NiYAHADf3JWKAkE7nxOWHOmkMLCQm1RVRV5eXkwGAxwcuIPTxZRFMXquVPpMHt5mL08es6ePRZ2IDAwEBcvXkRmZqa27sCBAxbbFN2m9Ndt/nda2KCgIMTHx5d4jj/++AOpqamYMmUKOnfujMDAQG1Qd5GiC42iMRkladCgAZycnJCYmKitKygowKFDh9C4ceN7vMp7MxqNcHd3t1iAO7PkkG2pisBJwxVmL4GqCPj6+mpfJFjDrFmzYDKZEB0djW3btsFkMqFbt25WO749MBgMVs+dSofZy8Ps5dFz9vqriO4qPz8fly9ftliuXr2KLl26oFGjRujfvz+Sk5Oxd+9eTJ482WLfhg0bwtfXF5GRkUhLS8PXX3+NBQsWWGwzadIkHDp0CMOHD8exY8dw6tQpLF++HFevXkXVqlVRvXp1/Otf/8KZM2fw/fffW/QQAEDNmjVhMpmwY8cO/P7778jKyir2GlxdXTFs2DCMGzcOO3bswMmTJzFkyBDcunULgwYNsnpmvLa1PUUAvsKD2UugCODq1atWHdAXGRkJIYTFkpCQYLXj2wNVVa2eO5UOs5eH2cuj5+zZsHiE7NixA97e3hZL+/btYTAYsGXLFvz5559o27YtBg8ejOjoaIt9K1WqhPXr1+PUqVMICgrC3LlzMWvWLIttGjVqhO+++w7Jyclo27YtQkJC8OWXX8LR0REGgwEbNmzA4cOH0bRpU7z99tv45z//abG/o6MjFi1ahJUrV8LHxwcvvvhiia9jzpw56NWrF/r164dWrVrhzJkz2LlzpzZ1rjVxZiLbM0CBr6jC7CUwQMHVq1d1OQWhPRNCMHdJmL08zF4ePWevCD1WRVRO2dnZ8PDwQOiGEVBceS+4LTkIBU+IOvhJuQAzuy1sykEoWOE/BP7+/nBwcJBdToVhNpuRlpbG3CVg9vIwe3lsnX3RNVVWVpZ2q/ndsMeCiIiIiIjKjQ0Lsmv8vtz2BIDflRxmL4EA4OHhocuZQuyZoijMXRJmLw+zl0fP2fNWKLJLZem2IyIiIqKS8VYoov/S44wJ9k5VVWRmZjJ7CZi9HMxdHmYvD7OXR8/Zs2FBdo0dcrYnhEBWVhazl4DZy8Hc5WH28jB7efScPRsWRERERERUbo6yCyB6mHp8N5XTzdqYNt1s2ipON2tjRdPNEhERycAeC7JrKucmsjkVAheVG8xeAhUCNWrU0OVMIfZMURTmLgmzl4fZy6Pn7NljQXZN6O/fnN0TCnARWbLLqJCEAtSoUUN2GRWOwWBg7pIwe3mYvTx6zp49FmRBURRs3bq1XMc4d+4cFEVBUlKSVWoqDwNbFjZnEAoaqzWZvQQGoeDixYtWnSlkyZIlCA4OhtFoREREhNWOa09UVbV67lQ6zF4eZi+PnrNnw6KCuXz5Mt58803Ur18fRqMRvr6+6NGjB+Lj4x/oeAMGDND1xQYvbW1PAVAFJmYvgQIgNzfXqjOF+Pj4YMqUKRgyhGM37kYIYfXcqXSYvTzMXh49Z89boSqQc+fOITQ0FFWqVME///lPNGvWDAUFBdi5cydGjBiBU6dOyS6RiHSmZ8+eAICkpCRcunRJcjVERKRn7LGoQIYPHw5FUXDw4EH06tULjRo1QpMmTTBmzBgcOHCgxH2OHz+OZ555BiaTCdWrV8frr7+OnJwcAEBkZCTWrFmDL7/8EoqiQFEUJCQkaPuePXsWnTp1gouLC5o3b479+/dbHPvHH3/EU089BZPJBF9fX4waNQq5ubna88uWLYO/vz+cnZ1Rq1YtvPzyy9YPhYiIiIisgg2LCuLatWvYsWMHRowYAVdX12LPV6lSpdi63NxchIWFoWrVqjh06BA2btyIXbt2YeTIkQCAd955B6+++irCw8ORmZmJzMxMtGvXTtt/8uTJeOedd5CUlIRGjRrhtddeQ2FhIQAgPT0d4eHh6NWrF44dO4bPP/8cP/74o3bsn3/+GaNGjcKMGTOQmpqKHTt24Omnn77r68vPz0d2drbFAnBWKBlUCJxR/mD2EqgQ8PLygsHAj3ZbMhgMzF0SZi8Ps5dHz9nzVqgK4syZMxBC4PHHHy/1PuvWrUNeXh7Wrl2rNUaWLFmCHj16YO7cuahVqxZMJhPy8/Ph5eVVbP933nkHzz33HAAgKioKTZo0wZkzZ/D4448jJiYGffv2xejRowEA/v7+WLRoETp06IDly5fjwoULcHV1xfPPP4/KlSujbt26aNmy5V1rjYmJQVRUVLH1HD9se0IBriBHdhkVklBK/pKAHi5FUZi7JMxeHmYvj56z119Thx6KBxngk5KSgubNm1v0cISGhkJVVaSmpt53/6CgIO1vb29vAMCVK1cAAMnJyYiNjYWbm5u2hIWFQVVVZGRkoGvXrqhbty7q16+Pfv364bPPPsOtW7fueq5JkyYhKytLWy5evAiAs0LJYBAKWqg+zF4Cg1Bw9uxZXc4UYs9UVWXukjB7eZi9PHrOnj0WFYS/vz8URbHpAO1KlSppfxf9iEvRP4KcnBy88cYbGDVqVLH96tSpAycnJxw5cgQJCQn47rvvMG3aNERGRuLQoUMlttKNRiOMRmOx9by0tT0FgAsqMXsJFAC3b9+26kwhhYWF2qKqKvLy8mAwGODkxF+0LyKEsHruVDrMXh5mL4+es2ePRQVRrVo1hIWFYenSpRYDpIvcuHGj2LrAwEAkJydbbJ+YmAiDwYCAgAAAgJOTE8xmc5nradWqFU6ePImGDRsWW4ouWBwdHdGlSxfMmzcPx44dw7lz5/D999+X+VxE9OBmzZoFk8mE6OhobNu2DSaTCd26dZNdFhER6RAbFhXI0qVLYTab0bZtW2zatAlpaWlISUnBokWLEBISUmz7vn37wtnZGf3798eJEyewe/duvPnmm+jXrx9q1aoFAPDz88OxY8eQmpqKq1evoqCgoFS1TJgwAfv27cPIkSORlJSEtLQ0fPnll9rg7e3bt2PRokVISkrC+fPnsXbtWqiqqjVoiMg2IiMjIYSwWP46+xsREVERNiwqkPr16+PIkSPo1KkTxo4di6ZNm6Jr166Ij4/H8uXLi23v4uKCnTt34tq1a2jTpg1efvlldO7cGUuWLNG2GTJkCAICAhAcHAxPT08kJiaWqpagoCDs2bMHp0+fxlNPPYWWLVti2rRp8PHxAXBnAOrmzZvxzDPPIDAwECtWrMD69evRpEmTMr1mM2cmsjkzBE4qvzN7CcwQqF27ti5nCrFnBoOBuUvC7OVh9vLoOXtF6PEGLaJyys7OhoeHB578fDgcXYqPvSCyV3uff092CUREZEeKrqmysrLg7u5+z23119QhsiIHzkxkcw5CQVvVl9lL4CAUnD59+oHGPdGDM5vNzF0SZi8Ps5dHz9lzViiya9u6zUTVqlVll1GhmM1mpKWlYZ6/PxwcHGSXU6EUZU+2p8dpHysKZi8Ps5dHr9mzx4KIiIiIiMqNDQsiIiIiIio3Dt4mu1Q00OjGjRvw8PCQXU6FUvTDPU5OTtoPI5JtMHs5mLs8zF4eZi+PrbMvy+BtjrEguxa+4104unJWKJsSgAOUO9PN8v81tiWAhGf/KbuKCsnRkf87lYXZy8Ps5dFr9rwViuyaA69sbc4BCp4QdZi9BA5QkJaWpttBffZKVVXmLgmzl4fZy6Pn7NmwICIiIiKicmPDgh6qAQMGICIiQnYZRPSAlixZguDgYBiNRv5bJiKie9LnDVpUKgMGDMCNGzewdetW2aXg3LlzqFevHo4ePYoWLVpo6z/44ANwfgCiR5ePjw+mTJmCXbt24dKlS7LLISIiHWPDgh4q2TMymSH4JrcxMwR+Ui7cGbxNNmWGgL+/PwwG63VG9+zZEwCQlJTEhsVdGAwGq+dOpcPs5WH28ug5e/1VRA+kY8eOGDVqFMaPH49q1arBy8sLkZGR2vN/+9vf0Lt3b4t9CgoKUKNGDaxduxbAncFAMTExqFevHkwmE5o3b44vvvhC2/769evo27cvPD09YTKZ4O/vj9WrVwMA6tWrBwBo2bIlFEVBx44dARS/Fep+dQLAqVOn0L59ezg7O6Nx48bYtWsXFEXRRc8MlY6RzTlpCgsLZZdQITF3eZi9PMxeHr1mz4aFHVmzZg1cXV3x008/Yd68eZgxYwbi4uIAAH379sW2bduQk5Ojbb9z507cunULL730EgAgJiYGa9euxYoVK/DLL7/g7bffxt///nfs2bMHADB16lScPHkS3377LVJSUrB8+XLUqFEDAHDw4EEAwK5du5CZmYnNmzc/UJ1msxkRERFwcXHBTz/9hH/961+YPHnyfV97fn4+srOzLRaAs0LJ4AAFLYQPs5fAAQoyMjJ0OVOIPVNVlblLwuzlYfby6Dl7fq1oR4KCgjB9+nQAgL+/P5YsWYL4+Hh07doVYWFhcHV1xZYtW9CvXz8AwLp16/DCCy+gcuXKyM/Px+zZs7Fr1y6EhIQAAOrXr48ff/wRK1euRIcOHXDhwgW0bNkSwcHBAAA/Pz/t3J6engCA6tWrw8vL64HrjIuLQ3p6OhISErTjREdHo2vXrvc8ZkxMDKKiosqYGBERERFZC3ss7EhQUJDFY29vb1y5cgXAnR9SefXVV/HZZ58BAHJzc/Hll1+ib9++AIAzZ87g1q1b6Nq1K9zc3LRl7dq1SE9PBwAMGzYMGzZsQIsWLTB+/Hjs27fP6nWmpqbC19fXonHStm3b+x5z0qRJyMrK0paLFy8+UG1ERERE9GDYY2FHKlWqZPFYURSLbrK+ffuiQ4cOuHLlCuLi4mAymRAeHg4A2i1SX3/9NR577DGL4xiNd365unv37jh//jy++eYbxMXFoXPnzhgxYgTmz59v1TofhNFo1Ook+Qqhv+7ZisLag/kKCwu1RVVV5OXlwWAwwMnJyarnedTpcRBlRcHs5WH28ug1ezYsKpB27drB19cXn3/+Ob799lu88sor2kV+48aNYTQaceHCBXTo0OGux/D09ET//v3Rv39/PPXUUxg3bhzmz5+vXWSYzeZy1RgQEICLFy/i999/R61atQAAhw4deuDjmRXOCmVrZkXgoMIeIxnMikCjRo2sesxZs2ZZ3GZoMpnQoUMHJCQkWPU8jzIHBwer506lw+zlYfby6Dl7XnNVMH/729+wYsUKnD59Grt379bWV65cGe+88w7efvttqKqK9u3bIysrC4mJiXB3d0f//v0xbdo0tG7dGk2aNEF+fj62b9+OwMBAAEDNmjVhMpmwY8cO1K5dG87Ozg801WzXrl3RoEED9O/fH/PmzcPNmzcxZcoUAHd6NsqMM57angCqwBk3kAeO37Yxcaf30dXV9cH+vZQgMjKy2MxtZEkIgdzcXKvmTqXD7OVh9vLoOXt99qPQQ9O3b1+cPHkSjz32GEJDQy2emzlzJqZOnYqYmBgEBgYiPDwcX3/9tTaVrJOTEyZNmoSgoCA8/fTTcHBwwIYNGwDcGcOxaNEirFy5Ej4+PnjxxRcfqD4HBwds3boVOTk5aNOmDQYPHqzNCuXs7Fz24/HK1uYcoKCxqMXsJXCAgkuXLulyphB7pqoqc5eE2cvD7OXRc/aK4M8ik84lJiaiffv2OHPmDBo0aFCqfbKzs+Hh4YHQDSOguPJecFtyEAqeEHXu/Eiewo8XW3IQClb4D4G/vz8cHBxkl1NhmM1mpKWlMXcJmL08zF4eW2dfdE2VlZUFd3f3e27LW6FId7Zs2QI3Nzf4+/vjzJkzeOuttxAaGlrqRgURERER2R4bFqQ7N2/exIQJE3DhwgXUqFEDXbp0wYIFCx7oWNvDZqFKlSrWLZDuSVVVnDt3DjF+frqdtcJeFWWvt3tu7Z2iKHBycmLuEjB7eZi9PHrOnrdCkV0qS7cdEREREZWsLNdU/DqR7BrbzbYnhMCNGzeYvQTMXg7mLg+zl4fZy6Pn7NmwILumxxkT7J2qqrh8+TKzl4DZy8Hc5WH28jB7efScPcdYkF3r8d1UzgplY9qsUGmrOCuUjRXNCkVERCQDeyyIiIiIiKjc2LAgu8bvy21PALiBP5m9BALQ5S+x2jtFUZi7JMxeHmYvj56zZ8OiguvYsSNGjx4tu4yHRuWtODanKgInDVeYvQSqIuDr62vVaX6XLFmC4OBgGI1GREREWO249sRgMFg9dyodZi8Ps5dHz9nrryJ6KAYMGABFUYot8+bNw8yZM2WX99Dw2tb2FAH4Cg9mL4EigKtXr1p1QJ+Pjw+mTJmCIUM4duNuVFW1eu5UOsxeHmYvj56zZ8OiAgkPD0dmZqbF0rp1a1SuXFl2aQ+NAfrrJrR3BijwFVWYvQQGKLh69apVpyDs2bMnIiIiUKNGDasd094IIayeO5UOs5eH2cuj5+zZsKhAjEYjvLy8LJbOnTtb3Arl5+eH2bNnY+DAgahcuTLq1KmDf/3rXxbHmTBhAho1agQXFxfUr18fU6dORUFBgfZ8ZGQkWrRogU8++QR+fn7w8PBAnz59cPPmTW0bVVUxb948NGzYEEajEXXq1EF0dLT2/MWLF/Hqq6+iSpUqqFatGl588UWcO3fuoWVDREREROXDhgUVs2DBAgQHB+Po0aMYPnw4hg0bhtTUVO35ypUrIzY2FidPnsQHH3yAVatWYeHChRbHSE9Px9atW7F9+3Zs374de/bswZw5c7TnJ02ahDlz5mDq1Kk4efIk1q1bh1q1agEACgoKEBYWhsqVK2Pv3r1ITEyEm5sbwsPDcfv27RJrzs/PR3Z2tsVCRERERLbD37GoQLZv3w43Nzftcffu3Uvc7tlnn8Xw4cMB3OmdWLhwIXbv3o2AgAAAwJQpU7Rt/fz88M4772DDhg0YP368tl5VVcTGxmq3WfXr1w/x8fGIjo7GzZs38cEHH2DJkiXo378/AKBBgwZo3749AODzzz+Hqqr48MMPtRkPVq9ejSpVqiAhIQHdunUrVnNMTAyioqKKrRcAb8ixMQHgdyWHs0JJIAB4eHjocqYQe6YoCnOXhNnLw+zl0XP2bFhUIJ06dcLy5cu1x66urnjttdeKbRcUFKT9rSgKvLy8cOXKFW3d559/jkWLFiE9PR05OTkoLCyEu7u7xTH8/Pwsxm54e3trx0hJSUF+fj46d+5cYp3Jyck4c+ZMsbEfeXl5SE9PL3GfSZMmYcyYMdrj7Oxs+Pr6QlUEu+VsTFUE0vGH7DIqJFUR8Pb2ll1GhWMwGJi7JMxeHmYvj56zZ8OiAnF1dUXDhg3vu12lSpUsHiuKos08sH//fvTt2xdRUVEICwuDh4cHNmzYgAULFpT6GCaT6Z7nz8nJQevWrfHZZ58Ve87T07PEfYxGI4xGY7H1BqG/1ry9MwgF9VANGbjGKWdtzCAUZGZmolatWlabhrCwsFBbVFVFXl4eDAYDnJz4i/ZFVFXF77//btXcqXSYvTzMXh49Z6+vakj39u3bh7p162Ly5MkIDg6Gv78/zp8/X6Zj+Pv7w2QyIT4+vsTnW7VqhbS0NNSsWRMNGza0WDw8PMp0LjYrbE8BUEu4MXsJFABZWVlWnSlk1qxZMJlMiI6OxrZt22AymUq8HbEiE0JYPXcqHWYvD7OXR8/Zs2FBZeLv748LFy5gw4YNSE9Px6JFi7Bly5YyHcPZ2RkTJkzA+PHjsXbtWqSnp+PAgQP46KOPAAB9+/ZFjRo18OKLL2Lv3r3IyMhAQkICRo0ahUuXLj2Ml0VEdxEZGQkhhMWSkJAguywiItIhNiyoTF544QW8/fbbGDlyJFq0aIF9+/Zh6tSpZT7O1KlTMXbsWEybNg2BgYHo3bu3NgbDxcUFP/zwA+rUqYOePXsiMDAQgwYNQl5eXrGxHERERESkD4rQYz8KUTllZ2fDw8MDIRuGw8G1+NgLengUAdSGBy4hCxziYluKADaHvItq1arp7r5be6aqKq5du8bcJWD28jB7eWydfdE1VVZW1n2/4OXgbbJrvLC1PaEAF5Elu4wKSSjgL2RLYDAYmLskzF4eZi+PnrNnw4Ls2rfdolGlShXZZVQoqqri119/xWOPPcZvsWxMVVVcvHiR2dsY3/PyMHt5mL08es5eX9UQWRnv9LM9IQRyc3OZvQTMXg7mLg+zl4fZy6Pn7NmwICIiIiKicmPDgoiIiIiIyo1jLMiuPffdFM4KZWOKADzhhv+k5XDwvI0pAvjqqWm6u+fW3hkMBnh5eTF3CZi9PMxeHj1nz4YF2TVe2NqeUIAryJFdRoUkFHCyAgkURWHukjB7eZi9PHrOXn9NHSIrMrBlYXMGoaCF6sPsJTAIBWfPnoWqqrJLqVBUVWXukjB7eZi9PHrOng0LeiTExsY+UOucl7a2pwBwQSVmL4EC4Pbt21adKWTJkiUIDg6G0WhERESE1Y5rT4QQVs+dSofZy8Ps5dFz9mxYkGbAgAFQFAWKoqBSpUqoV68exo8fj7y8PKudIzIyEi1atLDa8Yjo4fLx8cGUKVMwZMgQ2aUQEZHOcYwFWQgPD8fq1atRUFCAw4cPo3///lAUBXPnzpVdGhFJ0LNnTwBAUlISLl26JLkaIiLSM/ZYkAWj0QgvLy/4+voiIiICXbp0QVxcHIA79/TFxMSgXr16MJlMaN68Ob744gtt34SEBCiKgvj4eAQHB8PFxQXt2rVDamoqgDu3M0VFRSE5OVnrGYmNjQUAvPfee2jWrBlcXV3h6+uL4cOHIyen/AOAzdBfN6G9M0PgpPI7s5fADIHatWvrcqYQe2YwGJi7JMxeHmYvj56z119FpBsnTpzAvn374OTkBACIiYnB2rVrsWLFCvzyyy94++238fe//x179uyx2G/y5MlYsGABfv75Zzg6OmLgwIEAgN69e2Ps2LFo0qQJMjMzkZmZid69ewO4849k0aJF+OWXX7BmzRp8//33GD9+fKlrzc/PR3Z2tsUCgIMsZFCAG0oes5dBAdzc3KAoDN+WFEVh7pIwe3mYvTx6zp63QpGF7du3w83NDYWFhcjPz4fBYMCSJUuQn5+P2bNnY9euXQgJCQEA1K9fHz/++CNWrlyJDh06aMeIjo7WHk+cOBHPPfcc8vLyYDKZ4ObmBkdHR3h5eVmcd/To0drffn5+mDVrFoYOHYply5aVqu6YmBhERUUVW+/AmYlszkEoaC1q47ByCWaFvRa25CAUnD59Gg0aNICDg4PscioMs9mM9PR05i4Bs5eH2cuj5+zZsCALnTp1wvLly5Gbm4uFCxfC0dERvXr1wi+//IJbt26ha9euFtvfvn0bLVu2tFgXFBSk/e3t7Q0AuHLlCurUqXPX8+7atQsxMTE4deoUsrOzUVhYiLy8PNy6dQsuLi73rXvSpEkYM2aM9jg7Oxu+vr6les1kfY7sDJVGj9MPVgTMXR5mLw+zl0ev2bNhQRZcXV3RsGFDAMDHH3+M5s2b46OPPkLTpk0BAF9//TUee+wxi32MRstftq5UqZL2d1E33b3+AZw7dw7PP/88hg0bhujoaFSrVg0//vgjBg0ahNu3b5eqYWE0GovVQUTlV1hYqC2qqiIvLw8Gg0G7RZKIiKgIGxZ0VwaDAe+++y7GjBmD06dPw2g04sKFCxa3PZWVk5MTzGazxbrDhw9DVVUsWLBAG4j073//u1y1E5F1zJo1y+I2Q5PJhA4dOiAhIUFeUUREpEu8X4Hu6ZVXXoGDgwNWrlyJd955B2+//TbWrFmD9PR0HDlyBIsXL8aaNWtKfTw/Pz9kZGQgKSkJV69eRX5+Pho2bIiCggIsXrwYZ8+exSeffIIVK1ZYpX7OTGR7ZggkKb8xewnMEKhXr55VZwqJjIyEEMJiYaPCksFgsHruVDrMXh5mL4+es9dfRaQrjo6OGDlyJObNm4dJkyZh6tSpiImJQWBgIMLDw/H111+jXr16pT5er169EB4ejk6dOsHT0xPr169H8+bN8d5772Hu3Llo2rQpPvvsM8TExDzEV0UPWz4KZZdQYTk6siNaBuYuD7OXh9nLo9fsFaHH3wMnKqfs7Gx4eHggdMMIKK68F9yWHISCJ0Qd/KRc4KxQNuYgFKzwHwJ/f3/dzRRiz8xmM9LS0pi7BMxeHmYvj62zL7qmysrKgru7+z23ZY8FERERERGVmz77UYisZFu3mahatarsMiqUom9SZvNbLJsryp6IiEgG9lgQEREREVG5cYwF2aWi+wFv3LgBDw8P2eVUKEIIqKoKg8Gg/Y4J2Qazl4O5y8Ps5WH28tg6e46xICKpCgs5K5QszF4O5i4Ps5eH2cuj1+w5xoLs2nM7JnNWKBvjrFDycFYoOVRVRUZGBnOXgNnLw+zl0XP27LEgIiIiIqJyY8OCiIiIiIjKjQ0LeqhiY2NRpUoV2WWQjRVClV1ChWUwWPdjfcmSJQgODobRaERERIRVj21PrJ07lR6zl4fZy6PX7PVZlQ795z//wbBhw1CnTh0YjUZ4eXkhLCwMiYmJD/3cfn5+eP/998t1jMjISLRo0cIq9ZRF7969cfr0aZuftwjv8bc9syJw0HCR2UtgVgQaNWpk1XtufXx8MGXKFAwZMsRqx7Q3Dg4OVs+dSofZy8Ps5dFz9hy8XUq9evXC7du3sWbNGtSvXx+///474uPj8ccffzy0c96+fRtOTo/2wGOTyQSTySSvAF7b2p4AqsAZN5AHcAZC2xJATk4OXF1drTYFYc+ePQEASUlJuHTpklWOaW+EEMjNzbVq7lQ6zF4eZi+PnrNnj0Up3LhxA3v37sXcuXPRqVMn1K1bF23btsWkSZPwwgsvAAAURcHy5cvRvXt3mEwm1K9fH1988YXFcY4fP45nnnkGJpMJ1atXx+uvv46cnBzt+QEDBiAiIgLR0dHw8fFBQEAAOnbsiPPnz+Ptt9+GoijaG+j8+fPo0aMHqlatCldXVzRp0gTffPNNqV+TqqqYMWMGateuDaPRiBYtWmDHjh0W2+zbtw8tWrSAs7MzgoODsXXrViiKgqSkJG2br776Cv7+/nB2dkanTp2wZs0aKIqCGzduACh+K1RRz8knn3wCPz8/eHh4oE+fPrh586a2zc2bN9G3b1+4urrC29sbCxcuRMeOHTF69OhSv74iDryytTkHKGgsajF7CRyg4NKlS1BV3opmS6qqMndJmL08zF4ePWfPhkUpuLm5wc3NDVu3bkV+fv5dt5s6dSp69eqF5ORk9O3bF3369EFKSgoAIDc3F2FhYahatSoOHTqEjRs3YteuXRg5cqTFMeLj45Gamoq4uDhs374dmzdvRu3atTFjxgxkZmYiMzMTADBixAjk5+fjhx9+wPHjxzF37ly4ublpx/Hz80NkZORda/3ggw+wYMECzJ8/H8eOHUNYWBheeOEFpKWlAbjzYyg9evRAs2bNcOTIEcycORMTJkywOEZGRgZefvllREREIDk5GW+88QYmT5583zzT09OxdetWbN++Hdu3b8eePXswZ84c7fkxY8YgMTERX331FeLi4rB3714cOXLkvsclIiIiInl4K1QpODo6IjY2FkOGDMGKFSvQqlUrdOjQAX369EFQUJC23SuvvILBgwcDAGbOnIm4uDgsXrwYy5Ytw7p165CXl4e1a9fC1dUVwJ1BkT169MDcuXNRq1YtAICrqys+/PBDi1ugHBwcULlyZXh5eWnrLly4gF69eqFZs2YAgPr161vU3KBBA9SoUeOur2n+/PmYMGEC+vTpAwCYO3cudu/ejffffx9Lly7FunXroCgKVq1aBWdnZzRu3Bi//vqrxX3WK1euREBAAP75z38CAAICAnDixAlER0ffM09VVREbG4vKlSsDAPr164f4+HhER0fj5s2bWLNmDdatW4fOnTsDAFavXg0fH597HjM/P9+i0ZednX3P7YmIiIjIuthjUUq9evXCb7/9hq+++grh4eFISEhAq1atEBsbq20TEhJisU9ISIjWY5GSkoLmzZtrjQoACA0NhaqqSE1N1dY1a9asVOMqRo0ahVmzZiE0NBTTp0/HsWPHLJ6Pj48v1htSJDs7G7/99htCQ0Mt1oeGhmr1pqamIigoCM7Oztrzbdu2tdg+NTUVbdq0sVj3v9uU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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# **Country-wise Distribution of Users**" + ], + "metadata": { + "id": "F7P-pi-5LvDh" + } + }, + { + "cell_type": "code", + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# Step 1: Clean column names\n", + "df_country_users.columns = df_country_users.columns.str.strip()\n", + "\n", + "# Step 2: Sort for better readability\n", + "df_country_users_sorted = df_country_users.sort_values(by='total_users', ascending=True)\n", + "\n", + "# Step 3: Plot\n", + "plt.figure(figsize=(8, 5))\n", + "bars = plt.barh(df_country_users_sorted['country'], df_country_users_sorted['total_users'], color='cornflowerblue')\n", + "\n", + "plt.title('Country-wise Distribution of Users')\n", + "plt.xlabel('Number of Users')\n", + "plt.ylabel('Country')\n", + "plt.grid(axis='x', linestyle='--', alpha=0.5)\n", + "\n", + "# Step 4: Add labels to bars\n", + "for bar in bars:\n", + " width = bar.get_width()\n", + " plt.text(width + 0.3, bar.get_y() + bar.get_height() / 2,\n", + " str(int(width)), va='center', fontsize=9)\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 507 + }, + "id": "_iFwVIndNM86", + "outputId": "6de196a4-08ec-4105-82a9-59b4c9d2846c" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAHqCAYAAACZcdjsAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAb5RJREFUeJzt3Xd4VGX+///XmYSUTUhCkxCBhN6rYEMBFQUFFLF/VEAWdRUF7LJKL1aKioptAXftLiBiRQQLKyoiYKFJEySAqEkMSknm/P7wl/kymftGkkk4B/N8XFeua2cymdx5ErN555xzj+O6risAAAAAiELA6wUAAAAAOPoxWAAAAACIGoMFAAAAgKgxWAAAAACIGoMFAAAAgKgxWAAAAACIGoMFAAAAgKgxWAAAAACIGoMFAAAAgKgxWAAAjgqLFy+W4zhavHix10s5pNGjR8txnCPyubp27aquXbuGbhc1evXVV4/I5x8wYICysrKOyOcqrfz8fA0aNEjp6elyHEfDhg3zeknAXxaDBQCUow0bNujaa69V/fr1lZCQoJSUFHXq1EkPPfSQfv/9d6+XJ0l67LHHNHPmTK+X4UszZ86U4ziht4SEBGVkZKh79+56+OGH9euvv5bJ59m+fbtGjx6tFStWlMnzlSU/r+1wTJw4UTNnztR1112nf//737ryyiutj3UcRzfccIPxfa+++upRMdgCXor1egEA8Ff1xhtv6KKLLlJ8fLz69eunli1bav/+/fr4449122236ZtvvtGTTz7p9TL12GOPqXr16howYIDXSzmkzp076/fff1dcXNwR/9xjx45VvXr1dODAAe3YsUOLFy/WsGHDNHnyZM2bN0+tW7cOPfbuu+/WnXfeWaLn3759u8aMGaOsrCy1bdv2sD/u3XffLdHnKY1Dre2pp55SMBgs9zVE4/3339eJJ56oUaNGeb0U4C+PwQIAysGmTZt06aWXKjMzU++//75q1aoVet/gwYP13Xff6Y033vBwhaWzZ88eJSUlefK5A4GAEhISPPncZ599tjp06BC6PXz4cL3//vvq1auXzj33XK1evVqJiYmSpNjYWMXGlu//vf7222/629/+5smQdbBKlSp5+vkPx65du9S8eXOvl1EqRf/OwNGCU6EAoBzcf//9ys/P1zPPPBM2VBRp2LChhg4dGrpdUFCgcePGqUGDBoqPj1dWVpb++c9/at++fWEf5ziORo8eHfF8WVlZYUccik7hWbJkiW6++WbVqFFDSUlJOv/88/Xjjz+Gfdw333yjDz74IHS6T9E5+0XP8cEHH+j666/XMccco9q1a2vRokVyHEdz5syJWMfzzz8vx3H0ySefWNv07dtX7du3D7uvd+/echxH8+bNC9336aefynEcvfXWW5LM11isX79eF1xwgdLT05WQkKDatWvr0ksvVW5ubtjz/+c//9Fxxx2nxMREVa1aVZdeeqm2bt1qXePhOP300zVixAht2bJF//nPf0L3m66xWLBggU455RSlpaUpOTlZTZo00T//+c/Q19WxY0dJ0lVXXRX6dyg6Pa1r165q2bKlvvjiC3Xu3Fl/+9vfQh9b/BqLIoWFhfrnP/+p9PR0JSUl6dxzz434eot/zxQ5+Dn/bG2mayz27NmjW265RXXq1FF8fLyaNGmiBx98UK7rhj2u6LSjuXPnqmXLloqPj1eLFi309ttvm4MXs2vXLv39739XzZo1lZCQoDZt2mjWrFmh9xd9v2zatElvvPFGaO2bN28+rOc/HGX5/Xeof+dly5ape/fuql69uhITE1WvXj0NHDiwzL4OoKxwxAIAysHrr7+u+vXr6+STTz6sxw8aNEizZs3ShRdeqFtuuUWffvqp7rnnHq1evdr4C/zhuvHGG1WlShWNGjVKmzdv1tSpU3XDDTfopZdekiRNnTpVN954o5KTk3XXXXdJkmrWrBn2HNdff71q1KihkSNHas+ePeratavq1Kmj5557Tueff37YY5977jk1aNBAJ510knVNp556ql577TXl5eUpJSVFrutqyZIlCgQC+uijj3TuuedKkj766CMFAgF16tTJ+Dz79+9X9+7dtW/fPt14441KT0/XDz/8oPnz5ysnJ0epqamSpAkTJmjEiBG6+OKLNWjQIP3444965JFH1LlzZ3355ZdKS0srVVtJuvLKK/XPf/5T7777rq6++mrjY7755hv16tVLrVu31tixYxUfH6/vvvtOS5YskSQ1a9ZMY8eO1ciRI3XNNdfo1FNPlaSw752ffvpJZ599ti699FJdccUVEf9GxU2YMEGO4+iOO+7Qrl27NHXqVHXr1k0rVqwIHVk5HIeztoO5rqtzzz1XixYt0t///ne1bdtW77zzjm677Tb98MMPmjJlStjjP/74Y82ePVvXX3+9KleurIcfflgXXHCBvv/+e1WrVs26rt9//11du3bVd999pxtuuEH16tXTK6+8ogEDBignJ0dDhw5Vs2bN9O9//1s33XSTateurVtuuUWSVKNGjcP++g+lPL7/TP/Ou3bt0llnnaUaNWrozjvvVFpamjZv3qzZs2eXydcBlCkXAFCmcnNzXUnueeedd1iPX7FihSvJHTRoUNj9t956qyvJff/990P3SXJHjRoV8RyZmZlu//79Q7dnzJjhSnK7devmBoPB0P033XSTGxMT4+bk5ITua9GihdulS5eI5yx6jlNOOcUtKCgIe9/w4cPd+Pj4sOfZtWuXGxsba1zfwT7//HNXkvvmm2+6ruu6q1atciW5F110kXvCCSeEHnfuuee67dq1C91etGiRK8ldtGiR67qu++WXX7qS3FdeecX6uTZv3uzGxMS4EyZMCLv/q6++cmNjYyPutzX4/PPPrY9JTU0NW+eoUaPcg//vdcqUKa4k98cff7Q+R1GTGTNmRLyvS5curiR3+vTpxvcd/G9X1OjYY4918/LyQve//PLLriT3oYceCt1X/HvG9pyHWlv//v3dzMzM0O25c+e6ktzx48eHPe7CCy90Hcdxv/vuu9B9kty4uLiw+1auXOlKch955JGIz3WwqVOnupLc//znP6H79u/f75500klucnJy2NeemZnp9uzZ85DPd/CaBg8ebHzfK6+8Uq7ff7Z/5zlz5vzp9yDgF5wKBQBlLC8vT5JUuXLlw3r8m2++KUm6+eabw+4v+gtrNNdiXHPNNWGn5Zx66qkqLCzUli1bDvs5rr76asXExITd169fP+3bty9sW9OXXnpJBQUFuuKKKw75fO3atVNycrI+/PBDSX8cmahdu7b69eun5cuX67fffpPruvr4449DfyE3KfqL8DvvvKPffvvN+JjZs2crGAzq4osv1u7du0Nv6enpatSokRYtWnRYDQ4lOTn5kLtDFf1F+rXXXiv1hc7x8fG66qqrDvvx/fr1C/v+u/DCC1WrVq3Q91p5efPNNxUTE6MhQ4aE3X/LLbfIdd3QaW1FunXrpgYNGoRut27dWikpKdq4ceOffp709HRddtllofsqVaqkIUOGKD8/Xx988EEZfDWHVh7ff6Z/56Lvn/nz5+vAgQNl/4UAZYjBAgDKWEpKiiQd9lakW7ZsUSAQUMOGDcPuT09PV1paWomGgOLq1q0bdrtKlSqSpF9++eWwn6NevXoR9zVt2lQdO3bUc889F7rvueee04knnhj6OnJzc7Vjx47Q288//yxJiomJ0UknnaSPPvpI0h+DxamnnqpTTjlFhYWFWrp0qb799lv9/PPPhxws6tWrp5tvvllPP/20qlevru7du+vRRx8NO799/fr1cl1XjRo1Uo0aNcLeVq9erV27dh12B5v8/PxDDpGXXHKJOnXqpEGDBqlmzZq69NJL9fLLL5doyDj22GNLdKF2o0aNwm47jqOGDRuW6fUFJlu2bFFGRkZEj2bNmoXef7Di35/SH9+jf/b9uWXLFjVq1EiBQPivMbbPU5aKBvXy+P4z/Tt36dJFF1xwgcaMGaPq1avrvPPO04wZMyKuvwL8gGssAKCMpaSkKCMjQ19//XWJPi6aF1UrLCw03l/8SEMRt9iFtIdiOye/X79+Gjp0qLZt26Z9+/Zp6dKlmjZtWuj9Q4cODbuYtkuXLqELr0855RRNmDBBe/fu1UcffaS77rpLaWlpatmypT766KPQNQSHGiwkadKkSRowYIBee+01vfvuuxoyZIjuueceLV26VLVr11YwGAxdAG5qkZycfNgdTLZt26bc3NyIofBgiYmJ+vDDD7Vo0SK98cYbevvtt/XSSy/p9NNP17vvvmv9Nyr+HGXN9v1WWFh4WGsqC2Xx/VmW4uPjra8vU3RU4uCdycr6+8/071z0godLly7V66+/rnfeeUcDBw7UpEmTtHTp0qi/h4GyxGABAOWgV69eevLJJ/XJJ58c8kJmScrMzFQwGNT69etDf3GVpJ07dyonJ0eZmZmh+6pUqaKcnJywj9+/f7+ys7NLvdbSDjSXXnqpbr75Zr3wwgv6/fffValSJV1yySWh999+++1hp0UVHS2R/hgY9u/frxdeeEE//PBDaIDo3LlzaLBo3Ljxn16kLEmtWrVSq1atdPfdd+t///ufOnXqpOnTp2v8+PFq0KCBXNdVvXr11Lhx41J9nYfy73//W5LUvXv3Qz4uEAjojDPO0BlnnKHJkydr4sSJuuuuu7Ro0SJ169atzF+pe/369WG3XdfVd999F/Z6G6bvJemPv/bXr18/dLska8vMzNR7772nX3/9NeyoxZo1a0LvLwuZmZlatWqVgsFg2FGLaD9PZmam1q5da3xf0f3Fn/tIff+deOKJOvHEEzVhwgQ9//zzuvzyy/Xiiy9q0KBBUT0vUJY4FQoAysHtt9+upKQkDRo0SDt37ox4/4YNG/TQQw9Jks455xxJf+zQdLDJkydLknr27Bm6r0GDBqFrE4o8+eST1iMWhyMpKcn4C+afqV69us4++2z95z//0XPPPacePXqoevXqofc3b95c3bp1C70dd9xxofedcMIJqlSpku677z5VrVpVLVq0kPTHwLF06VJ98MEHf3q0Ii8vTwUFBWH3tWrVSoFAIHSaSN++fRUTE6MxY8ZE/BXcdV399NNPJf66i7z//vsaN26c6tWrp8svv9z6uKJTwA5W9EJzRessem2Q0vw7mDz77LNhp+K9+uqrys7O1tlnnx26r0GDBlq6dKn2798fum/+/PkR26CWZG3nnHOOCgsLw45cSdKUKVPkOE7Y54/GOeecox07doR2N5P+2LL5kUceUXJysrp06VLq5126dKm++OKLsPtzcnL03HPPqW3btkpPT5d05L7/fvnll4iPLf79A/gFRywAoBw0aNBAzz//vC655BI1a9Ys7JW3//e//4W2xpSkNm3aqH///nryySeVk5OjLl266LPPPtOsWbPUp08fnXbaaaHnHTRokP7xj3/oggsu0JlnnqmVK1fqnXfeCfuFvqSOO+44Pf744xo/frwaNmyoY445RqeffvphfWy/fv104YUXSpLGjRt32J/zb3/7m4477jgtXbo09BoW0h9HLPbs2aM9e/b86WDx/vvv64YbbtBFF12kxo0bq6CgQP/+978VExOjCy64QNIf/w7jx4/X8OHDtXnzZvXp00eVK1fWpk2bNGfOHF1zzTW69dZb/3S9b731ltasWaOCggLt3LlT77//vhYsWKDMzEzNmzfvkC/cN3bsWH344Yfq2bOnMjMztWvXLj322GOqXbu2TjnllNA609LSNH36dFWuXFlJSUk64YQTjNe3HI6qVavqlFNO0VVXXaWdO3dq6tSpatiwYdiWuIMGDdKrr76qHj166OKLL9aGDRv0n//8J+xi6pKurXfv3jrttNN01113afPmzWrTpo3effddvfbaaxo2bFjEc5fWNddcoyeeeEIDBgzQF198oaysLL366qtasmSJpk6detgbJxR355136pVXXlHnzp117bXXqmnTptq+fbtmzpyp7OxszZgxI/TYI/X9N2vWLD322GM6//zz1aBBA/3666966qmnlJKSEvqjBOAbXmxFBQAVxbp169yrr77azcrKcuPi4tzKlSu7nTp1ch955BF37969occdOHDAHTNmjFuvXj23UqVKbp06ddzhw4eHPcZ1XbewsNC944473OrVq7t/+9vf3O7du7vfffeddbvZ4ltUFt+y1XVdd8eOHW7Pnj3dypUru5JCW40ezlar+/btc6tUqeKmpqa6v//+e4na3Hbbba4k97777gu7v2HDhq4kd8OGDYdc+8aNG92BAwe6DRo0cBMSEtyqVau6p512mvvee+9FfK7//ve/7imnnOImJSW5SUlJbtOmTd3Bgwe7a9euPeQaixoUvcXFxbnp6enumWee6T700ENh25oWKb7d7MKFC93zzjvPzcjIcOPi4tyMjAz3sssuc9etWxf2ca+99prbvHlzNzY2Nmx71y5durgtWrQwrs+23ewLL7zgDh8+3D3mmGPcxMREt2fPnu6WLVsiPn7SpEnuscce68bHx7udOnVyly1bFvGch1pb8e1mXdd1f/31V/emm25yMzIy3EqVKrmNGjVyH3jggbBtj13XvrWrbRvc4nbu3OleddVVbvXq1d24uDi3VatWxi1xS7LdrOu67rZt29xBgwa5xx57rBsbG+tWrVrV7dWrl7t06dKwx5X195/t33n58uXuZZdd5tatW9eNj493jznmGLdXr17usmXLDvtrAo4Ux3U9ukIKAHDUKygoUEZGhnr37q1nnnnG6+UAADzENRYAgFKbO3eufvzxR/Xr18/rpQAAPMYRCwBAiX366adatWqVxo0bp+rVq2v58uVeLwkA4DGOWAAASuzxxx/Xddddp2OOOUbPPvus18sBAPgARywAAAAARI0jFgAAAACixmABAAAAIGq8QB4qjGAwqO3bt6ty5cqhF+MCAACAneu6+vXXX5WRkaFA4NDHJBgsUGFs375dderU8XoZAAAAR52tW7eqdu3ah3wMgwUqjMqVK0uSNm/erCpVqni8Gn8pLCzUhg0b1KBBA8XExHi9HN+gixld7GhjRhc72pjRxe5It8nLy1OdOnVCv0cdCoMFKoyi059SUlKUkpLi8Wr8pbCwUMnJyUpJSeEH+EHoYkYXO9qY0cWONmZ0sfOqzeGcRs7F2wAAAACixmABAAAAIGq8QB4qjLy8PKWmpionJ0epqaleL8dX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9+//06/j2muvNR6FqFu3ruLi4rR8+XItXrxY7777rkaOHKnRo0fr888/N+62FR8fr/j4+JJ+yRVWbKBA+4OV/vyBFQxdzOhiRxszutjRxowudgUFBYqLiyvR44vegsGg9u7dq0AgoMTERF1xxRW677771L59ezmOo/vuu0/nnXdeqdbFEYty0KRJEy1fvjzi/uXLl6tx48ZRPXelSpVUWFgYdl/79u21du1aNWzYMOItEAioWbNm2rp1a+haBklaunRpqT5/8+bNwy6mNq1nyZIlGjBggM4//3y1atVK6enp2rx5c9hj4uLijF/Ht99+a/w6iv7jiY2NVbdu3XT//fdr1apV2rx5s95///0SfQ3sMBEpIFdZSdm0KYYuZnSxo40ZXexoY0YXu4Bcbdq0qUR/iB4/frwSExM1YcIEvf7660pMTNRZZ50lSZo6daoyMjJUr149NWnSRJmZmZo8eXKp1sYRi3Jw3XXXadq0aRoyZIgGDRqk+Ph4vfHGG3rhhRdKfc5akaysLC1cuFCdOnVSfHy8qlSpopEjR6pXr16qW7euLrzwQgUCAa1cuVJff/21xo8fr27duqlx48bq37+/HnjgAeXl5emuu+465Of56aefdNFFF2ngwIFq3bq1KleurGXLlun+++8Pm2JN62nUqJFmz56t3r17y3EcjRgxIuKbPysrSx9++KEuvfRSxcfHq3r16rrjjjt04okn6oYbbtCgQYOUlJSkb7/9VgsWLNC0adM0f/58bdy4UZ07d1aVKlX05ptvKhgMqkmTJlE1BQAA+CsbPXq0Ro8ebXxfUlLSn57mfrg4YlEO6tevrw8//FBr1qxRt27ddMIJJ+jll1/WK6+8oh49ekT13JMmTdKCBQtUp04dtWvXTpLUvXt3zZ8/X++++646duyoE088UVOmTFFmZqYkKRAIaM6cOfr99991/PHHa9CgQaEdo2ySk5N1wgknaMqUKercubNatmypESNG6Oqrr9a0adMOuZ7JkyerSpUqOvnkk9W7d291795d7du3D3v+sWPHavPmzWrQoEHoou/WrVvrgw8+0Lp163TqqaeqXbt2GjlyZOjakLS0NM2ePVunn366mjVrpunTp+uFF15QixYtomoKAACA6Dmu63KMCRVCXl6eUlNTNeDBjYpNTP3zD6hAAgqqXvIP2pR/rIL8vSGELmZ0saON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oYsZXexoY0YXO9qY0cXOz204YlGOsrKyNHXq1HJ5bsdxNHfu3Kieo2vXrho2bFiZrOdQFi9eLMdxlJOTU+6f63AcrWPFtGnT1KFDB8XHx6tPnz5l+tzBYFC7d+/25YVgXqKLGV3saGNGFzvamNHFzs9tGCyKsf2yPXPmTKWlpZXouT7//HNdc801odtlMQwcrgEDBkT88vnqq68qISFBkyZNkiTNnj1b48aNOyLr8RPnKD0ZKiMjQ3fffbeuvvrqMn9u13W1e/duX25d5yW6mNHFjjZmdLGjjRld7PzchlOhylGNGjW8XkLI008/rcGDB2v69Om66qqrJElVq/ICbUeTvn37SpJWrFihbdu2ebwaAACAcByxKKWiIwIPPvigatWqpWrVqmnw4ME6cOBA6DEHnwqVlZUlSTr//PPlOE7otiS99tprat++vRISElS/fn2NGTNGBQUFofevX79enTt3VkJCgpo3b64FCxaUaK3333+/brzxRr344ouhoUKKPDqTlZWliRMnauDAgapcubLq1q2rJ598Muy5/ve//6lt27ZKSEhQhw4dNHfuXDmOoxUrVoQe8+abb6px48ZKTEzUaaedps2bN0es6b///a9atGih+Ph4ZWVlhY6iHLyW8ePHq1+/fkpOTlZmZqbmzZunH3/8Ueedd56Sk5PVunVrLVu2rEQtAAAAUD4YLKKwaNEibdiwQYsWLdKsWbM0c+ZMzZw50/jYzz//XJI0Y8YMZWdnh25/9NFH6tevn4YOHapvv/1WTzzxhGbOnKkJEyZI+uM8ur59+youLk6ffvqppk+frjvuuOOw13jHHXdo3Lhxmj9/vs4///w/ffykSZPUoUMHffnll7r++ut13XXXae3atZL+eEn33r17q1WrVlq+fLnGjRsXsZatW7eqb9++6t27t1asWKFBgwbpzjvvDHvMF198oYsvvliXXnqpvvrqK40ePVojRoyIaDdlyhR16tRJX375pXr27Kkrr7xS/fr10xVXXKHly5erQYMG6tevX4kPBfrvwKH3HMdRamqqL3eY8BJdzOhiRxszutjRxowudn5uw6lQUahSpYqmTZummJgYNW3aVD179tTChQuN58AXnRaVlpam9PT00P1jxozRnXfeqf79+0uS6tevr3Hjxun222/XqFGj9N5772nNmjV65513lJGRIUmaOHGizj777D9d31tvvaXXXntNCxcu1Omnn35YX9M555yj66+/XtIfQ8mUKVO0aNEiNWnSRM8//7wcx9FTTz0VOnryww8/hH29jz/+uBo0aBA6AtGkSRN99dVXuu+++0KPmTx5ss444wyNGDFCktS4cWN9++23euCBBzRgwICwtVx77bWSpJEjR+rxxx9Xx44dddFFF4XWd9JJJ2nnzp1hTYvs27dP+/btC93Oy8uTxK5QJoFAQLVq1fJ6Gb5DFzO62NHGjC52tDGji52f23DEIgotWrRQTExM6HatWrW0a9euEj3HypUrNXbsWCUnJ4ferr76amVnZ+u3337T6tWrVadOndBQIUknnXTSYT1369atlZWVpVGjRik/P/+wP6aI4zhKT08PfU1r165V69atlZCQEHrM8ccfH/bxq1ev1gknnBB2X/H1rl69Wp06dQq7r1OnTlq/fr0KCwuNa6lZs6YkqVWrVhH32Zrfc889Sk1NDb0Vbc12tF68XZ6CwaCys7N9ucOEl+hiRhc72pjRxY42ZnSx83MbBotiUlJSlJubG3F/Tk6OUlNTw+6rVKlS2G3HcUr8j5yfn68xY8ZoxYoVobevvvpK69evD/sFvjSOPfZYLV68WD/88IN69OihX3/99U8/piy+prJy8FqKDveZ7rOtb/jw4crNzQ29bd269Y+PK68Fl7OCggLt3btXBQUFCgaD2rt3r/bv318mz+26rnJzc325w4SX6GJGFzvamNHFjjZmdLHzcxsGi2KaNGmi5cuXR9y/fPlyNW7cOKrnrlSpUthf5CWpffv2Wrt2rRo2bBjxFggE1KxZM23dulXZ2dmhj1m6dOlhf87MzEx98MEH2rFjx2EPFzZFpzUdfHpR0bUiRZo1a6bPPvss7L7i623WrJmWLFkSdt+SJUvUuHHjsCNA0YqPj1dKSkrY29Fs/PjxSkxM1IQJE/T6668rMTFRZ511ltfLAgAAkMRgEeG6667TunXrNGTIEK1atUpr167V5MmT9cILL+iWW26J6rmzsrK0cOFC7dixQ7/88oukP64dePbZZzVmzBh98803Wr16tV588UXdfffdkqRu3bqpcePG6t+/v1auXKmPPvpId911V4k+b506dbR48WLt2rVL3bt3D11rUFL/93//p2AwqGuuuUarV6/WO++8owcffFDS/zt68I9//EPr16/XbbfdprVr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NQYLVBjx8fEaNWqU4uPjvV6K79DGjC5mdLGjjRld7GhjRhc7P7dxXD++ugYAAACAowpHLAAAAABEjcECAAAAQNQYLAAAAABEjcECFcajjz6qrKwsJSQk6IQTTtBnn33m9ZI8dc8996hjx46qXLmyjjnmGPXp00dr1671elm+c++998pxHA0bNszrpfjCDz/8oCuuuELVqlVTYmKiWrVqpWXLlnm9LE8VFhZqxIgRqlevnhITE9WgQQONGzdOFfESxg8//FC9e/dWRkaGHMfR3Llzw97vuq5GjhypWrVqKTExUd26ddP69eu9WewRdqg2Bw4c0B133KFWrVopKSlJGRkZ6tevn7Zv3+7dgo+QP/ueOdg//vEPOY6jqVOnHrH1eeVwuqxevVrnnnuuUlNTlZSUpI4dO+r7778/8os9CIMFKoSXXnpJN998s0aNGqXly5erTZs26t69u3bt2uX10jzzwQcfaPDgwVq6dKkWLFigAwcO6KyzztKePXu8XppvfP7553riiSfUunVrr5fiC7/88os6deqkSpUq6a233tK3336rSZMmqUqVKl4vzVP33XefHn/8cU2bNk2rV6/Wfffdp/vvv1+PPPKI10s74vbs2aM2bdro0UcfNb7//vvv18MPP6zp06fr008/VVJSkrp37669e/ce4ZUeeYdq89tvv2n58uUaMWKEli9frtmzZ2vt2rU699xzPVjpkfVn3zNF5syZo6VLlx7Wqz//FfxZlw0bNuiUU05R06ZNtXjxYq1atUojRoxQQkLCEV5pMS5QARx//PHu4MGDQ7cLCwvdjIwM95577vFwVf6ya9cuV5L7wQcfeL0UX/j111/dRo0auQsWLHC7dOniDh061Oslee6OO+5wTznlFK+X4Ts9e/Z0Bw4cGHZf37593csvv9yjFfmDJHfOnDmh28Fg0E1PT3cfeOCB0H05OTlufHy8+8ILL3iwQu8Ub2Py2WefuZLcLVu2HJlF+YCty7Zt29xjjz3W/frrr93MzEx3ypQpR3xtXjJ1ueSSS9wrrrjCmwUdAkcs8Je3f/9+ffHFF+rWrVvovkAgoG7duumTTz7xcGX+kpubK0mqWrWqxyvxh8GDB6tnz55h3zcV3bx589ShQwdddNFFOuaYY9SuXTs99dRTXi/LcyeffLIWLlyodevWSZJWrlypjz/+WGeffbbHK/OXTZs2aceOHWH/TaWmpuqEE07gZ7FBbm6uHMdRWlqa10vxVDAY1JVXXqnbbrtNLVq08Ho5vhAMBvXGG2+ocePG6t69u4455hidcMIJhzyN7EhhsMBf3u7du1VYWKiaNWuG3V+zZk3t2LHDo1X5SzAY1LBhw9SpUye1bNnS6+V47sUXX9Ty5ct1zz33eL0UX9m4caMef/xxNWrUSO+8846uu+46DRkyRLNmzfJ6aZ668847demll6pp06aqVKmS2rVrp2HDhunyyy/3emm+UvTzlp/Ff27v3r264447dNlllyklJcXr5XjqvvvuU2xsrIYMGeL1Unxj165dys/P17333qsePXro3Xff1fnnn6++ffvqgw8+8HRtsZ5+dgC+MHjwYH399df6+OOPvV6K57Zu3aqhQ4dqwYIF3p+r6jPBYFAdOnTQxIkTJUnt2rXT119/renTp6t///4er847L7/8sp577jk9//zzatGihVasWKFhw4YpIyOjQndB6Rw4cEAXX3yxXNfV448/7vVyPPXFF1/ooYce0vLly+U4jtfL8Y1gMChJOu+883TTTTdJktq2bav//e9/mj59urp06eLZ2jhigb+86tWrKyYmRjt37gy7f+fOnUpPT/doVf5xww03aP78+Vq0aJFq167t9XI898UXX2jXrl1q3769YmNjFRsbqw8++EAPP/ywYmNjVVhY6PUSPVOrVi01b9487L5mzZp5vguJ12677bbQUYtWrVrpyiuv1E033cQRr2KKft7ys9iuaKjYsmWLFixYUOGPVnz00UfatWuX6tatG/p5vGXLFt1yyy3KysryenmeqV69umJjY33585jBAn95cXFxOu6447Rw4cLQfcFgUAsXLtRJJ53k4cq85bqubrjhBs2ZM0fvv/++6tWr5/WSfOGMM87QV199pRUrVoTeOnTooMsvv1wrVqxQTEyM10v0TKdOnSK2JF63bp0yMzM9WpE//PbbbwoEwv/vNCYmJvRXRfyhXr16Sk9PD/tZnJeXp08//bRC/ywuUjRUrF+/Xu+9956qVavm9ZI8d+WVV2rVqlVhP48zMjJ022236Z133vF6eZ6Ji4tTx44dffnzmFOhUCHcfPPN6t+/vzp06KDjjz9eU6dO1Z49e3TVVVd5vTTPDB48WM8//7xee+01Va5cOXSOc2pqqhITEz1enXcqV64ccZ1JUlKSqlWrVuGvP7npppt08skna+LEibr44ov12Wef6cknn9STTz7p9dI81bt3b02YMEF169ZVixYt9OWXX2ry5MkaOHCg10s74vLz8/Xdd9+Fbm/atEkrVqxQ1apVVbduXQ0bNkzjx49Xo0aNVK9ePY0YMUIZGRnq06ePd4s+Qg7VplatWrrwwgu1fPlyzZ8/X4WFhaGfyVWrVlVcXJxXyy53f/Y9U3zAqlSpktLT09WkSZMjvdQj6s+63HbbbbrkkkvUuXNnnXbaaXr77bf1+uuva/Hixd4tWmK7WVQcjzzyiFu3bl03Li7OPf74492lS5d6vSRPSTK+zZgxw+ul+Q7bzf4/r7/+utuyZUs3Pj7ebdq0qfvkk096vSTP5eXluUOHDnXr1q3rJiQkuPXr13fvuusud9++fV4v7YhbtGiR8edK//79Xdf9Y8vZESNGuDVr1nTj4+PdM844w127dq23iz5CDtVm06ZN1p/JixYt8nrp5erPvmeKqyjbzR5Ol2eeecZt2LChm5CQ4LZp08adO3eudwv+/zmuWwFfGhQAAABAmeIaCwAAAABRY7AAAAAAEDUGCwAAAABRY7AAAAAAEDUGCwAAAABRY7AAAAAAEDUGCwAAAABRY7AAAAAAEDUGCwAA/sTmzZvlOI5WrFjh9VJC1qxZoxNPPFEJCQlq27at18sBAAYLAID/DRgwQI7j6N577w27f+7cuXIcx6NVeWvUqFFKSkrS2rVrtXDhQuNjunbtqmHDhkXcP3PmTKWlpZXvAgFUOAwWAICjQkJCgu677z798ssvXi+lzOzfv7/UH7thwwadcsopyszMVLVq1cpwVdE7cOCA10sA4AEGCwDAUaFbt25KT0/XPffcY33M6NGjI04Lmjp1qrKyskK3BwwYoD59+mjixImqWbOm0tLSNHbsWBUUFOi2225T1apVVbt2bc2YMSPi+desWaOTTz5ZCQkJatmypT744IOw93/99dc6++yzlZycrJo1a+rKK6/U7t27Q+/v2rWrbrjhBg0bNkzVq1dX9+7djV9HMBjU2LFjVbt2bcXHx6tt27Z6++23Q+93HEdffPGFxo4dK8dxNHr06EOU+3OLFy/W8ccfr6SkJKWlpalTp07asmVL6P2vvfaa2rdvr4SEBNWvX19jxoxRQUFB2Hoef/xxnXvuuUpKStKECRP0yy+/6PLLL1eNGjWUmJioRo0aGZsC+OtgsAAAHBViYmI0ceJEPfLII9q2bVtUz/X+++9r+/bt+vDDDzV58mSNGjVKvXr1UpUqVfTpp5/qH//4h6699tqIz3Pbbbfplltu0ZdffqmTTjpJvXv31k8//SRJysnJ0emnn6527dpp2bJlevvtt7Vz505dfPHFYc8xa9YsxcXFacmSJZo+fbpxfQ899JAmTZqkBx98UKtWrVL37t117rnnav369ZKk7OxstWjRQrfccouys7N16623lrpFQUGB+vTpoy5dumjVqlX65JNPdM0114ROMfvoo4/Ur18/DR06VN9++62eeOIJzZw5UxMmTAh7ntGjR+v888/XV199pYEDB2rEiBH69ttv9dZbb2n16tV6/PHHVb169VKvE8BRwAUAwOf69+/vnnfeea7ruu6JJ57oDhw40HVd150zZ4578P+VjRo1ym3Tpk3Yx06ZMsXNzMwMe67MzEy3sLAwdF+TJk3cU089NXS7oKDATUpKcl944QXXdV1306ZNriT33nvvDT3mwIEDbu3atd377rvPdV3XHTdunHvWWWeFfe6tW7e6kty1a9e6ruu6Xbp0cdu1a/enX29GRoY7YcKEsPs6duzoXn/99aHbbdq0cUeNGnXI5+nSpYs7dOjQiPtnzJjhpqamuq7ruj/99JMryV28eLHxOc444wx34sSJYff9+9//dmvVqhW6LckdNmxY2GN69+7tXnXVVYdcH4C/Fo5YAACOKvfdd59mzZql1atXl/o5WrRooUDg//1fYM2aNdWqVavQ7ZiYGFWrVk27du0K+7iTTjop9L9jY2PVoUOH0DpWrlypRYsWKTk5OfTWtGlTSX9cD1HkuOOOO+Ta8vLytH37dnXq1Cns/k6dOkX1NdtUrVpVAwYMUPfu3dW7d2899NBDys7ODr1/5cqVGjt2bNjXdfXVVys7O1u//fZb6HEdOnQIe97rrrtOL774otq2bavbb79d//vf/8p87QD8hcECAHBU6dy5s7p3767hw4dHvC8QCMh13bD7TBcSV6pUKey24zjG+4LB4GGvKz8/X71799aKFSvC3tavX6/OnTuHHpeUlHTYzxmtlJQU5ebmRtyfk5Oj1NTU0O0ZM2bok08+0cknn6yXXnpJjRs31tKlSyX98XWNGTMm7Gv66quvtH79eiUkJISeo/jXdfbZZ2vLli266aabtH37dp1xxhlRnbIFwP8YLAAAR517771Xr7/+uj755JOw+2vUqKEdO3aEDRdl+doTRb9sS39cm/DFF1+oWbNmkqT27dvrm2++UVZWlho2bBj2VpJhIiUlRRkZGVqyZEnY/UuWLFHz5s1LtN4mTZpo+fLlEfcvX75cjRs3DruvXbt2Gj58uP73v/+pZcuWev7550Nf19q1ayO+poYNG4Yd9TGpUaOG+vfvr//85z+aOnWqnnzyyRKtH8DRJdbrBQAAUFKtWrXS5Zdfrocffjjs/q5du+rHH3/U/fffrwsvvFBvv/223nrrLaWkpJTJ53300UfVqFEjNWvWTFOmTNEvv/yigQMHSpIGDx6sp556Spdddpluv/12Va1aVd99951efPFFPf3004qJiTnsz3Pbbbdp1KhRatCggdq2basZM2ZoxYoVeu6550q03uuuu07Tpk3TkCFDNGjQIMXHx+uNN97QCy+8oNdff12StGnTJj355JM699xzlZGRobVr12r9+vXq16+fJGnkyJHq1auX6tatqwsvvFCBQEArV67U119/rfHjx1s/98iRI3XcccepRYsW2rdvn+bPnx8awgD8NXHEAgBwVBo7dmzEqUrNmjXTY489pkcffVRt2rTRZ599Vqan39x7772699571aZNG3388ceaN29eaKejoqMMhYWFOuuss9SqVSsNGzZMaWlpf/qX/eKGDBmim2++WbfccotatWqlt99+W/PmzVOjRo1K9Dz169fXhx9+qDVr1qhbt2464YQT9PLLL+uVV15Rjx49JEl/+9vftGbNGl1wwQVq3LixrrnmGg0ePFjXXnutJKl79+6aP3++3n33XXXs2FEnnniipkyZoszMzEN+7ri4OA0fPlytW7dW586dFRMToxdffLFE6wdwdHHc4iejAgAAAEAJccQCAAAAQNQYLAAAAABEjcECAAAAQNQYLAAAAABEjcECAAAAQNQYLAAAAABEjcECAAAAQNQYLAAAAABEjcECAAAAQNQYLAAAAABEjcECAAAAQNQYLAAAAABE7f8DOzeRJJYrkDkAAAAASUVORK5CYII=\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# **Volunteer Availability by Day**" + ], + "metadata": { + "id": "VdzKxAW0aoWE" + } + }, + { + "cell_type": "code", + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# Step 1: Remove duplicates to ensure accurate counting\n", + "df_user_availability_cleaned = df_user_availability[['user_id', 'day_of_week']].drop_duplicates()\n", + "\n", + "# Step 2: Count how many unique users are available each day\n", + "availability_counts = df_user_availability_cleaned['day_of_week'].value_counts().sort_values(ascending=True)\n", + "\n", + "# Step 3: Plot the bar chart\n", + "plt.figure(figsize=(6, 4))\n", + "bars = plt.barh(availability_counts.index, availability_counts.values, color='mediumpurple')\n", + "plt.title('Volunteer Availability by Day')\n", + "plt.xlabel('Number of Volunteers')\n", + "plt.ylabel('Day of the Week')\n", + "plt.grid(axis='x', linestyle='--', alpha=0.5)\n", + "\n", + "# Step 4: Add count labels\n", + "for bar in bars:\n", + " width = bar.get_width()\n", + " plt.text(width + 0.2, bar.get_y() + bar.get_height()/2,\n", + " str(int(width)), va='center', fontsize=9)\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 407 + }, + "id": "TFfzGv8ORosI", + "outputId": "8b53d962-b002-4371-edaa-20a7616a7c99" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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At58801Uq1YNq1evRlJSEr7++muDh66GDh2KRYsWITIyEsOGDcPt27excuVKNGzYUDsd21RFf/jefPNNREZGav+otG/fHiNGjMC8efOQkJCA559/HlWqVMH58+exefNmLF26FH369IG7uztWrFiBgQMHolmzZujXrx+8vb1x9epVbN++HW3atMEnn3xicl1Fg5eLzm31qGeeeUZ7osui5qhv377417/+henTp6NRo0bacWJFunfvji1btqBXr17o1q0bkpKSsHLlSjRo0EA7bsZYrVu3RtWqVTF48GC8+eabUBQFa9eu1Xvo09/fHwsWLMDly5dRt25dfPnll0hISMBnn3322CeqbNKkCWxtbbFgwQKkp6fDwcEBHTt2hI+PD4AHh1K7dOmCzZs3w9PTE926dTP6uU2p+7XXXsPUqVPxzTffYNSoUSb9XOfOncO6desghEBGRgYSExOxefNmZGVlYdGiRejSpYt2XVPfx27duqF69erYvHkzXnjhBW0uRAZZbuIeUeWybNkyAUA8/fTTJT5+8eJF0adPH+Hp6SkcHR3F008/Lb7//nuddUqafi6EEOvWrRMhISHC3t5eNGnSROzatUvvKQc+/PDDYq+NR6bSFxQUiHHjxglvb2+hKEqx6e2fffaZaN68uXBychJubm6iUaNGYurUqeLGjRs66+3du1dERkYKDw8P4ejoKEJDQ0V0dLQ4cuSIdp3BgwcLFxcXQ9Fpvfjii8LR0VFkZ2frXSc6OlpUqVJFpKSkCCEenI6gVq1aAoCYM2dOsfU1Go2YO3euCAwMFA4ODqJp06bi+++/L5ZfSTmVdMqB+Ph48cwzzwgnJyfh7+8vpk6dqp1+//D0//bt24uGDRuKI0eOiFatWglHR0cRGBgoPvnkE53XLO0pB4QQYtWqVSIkJETY2tqWePqBTZs2CQDijTfeKDnMEhhb98O6du0qAIhDhw4Z/ToAtDcbGxvh6ekpmjZtKsaPHy9OnTpVbH1T3scio0ePFgDE+vXrja6LKjdFCCNGfxIRUYWzbds29OzZE7/88ov21BPm0KtXL5w4caJcrg9oiokTJ+Lf//43bt68CWdnZ0uXQyrAMU1ERJXUqlWrEBISonN+sLKWnJyM7du3W910/vv372PdunV4+eWX2TCR0TimiYioktm4cSOOHz+O7du3Y+nSpWY5oWNSUhLi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vJSfnx8AFMvzYYmJicjKykL16tV1MkxKStLml5iYiFmzZuk8/vrrryM5ORk5OTna52rRooXOc48aNQobN25EkyZNMHXqVBw6dOixfjYia2Nn6QKIyDo9++yziIyMxNtvv43o6Gidx2xsbHQORQElDwSuUqWKzn1FUUpcptFojK4rKysLL774IhYsWFDssaKmAQBcXFyMfs6yMGzYMIwbNw7Lli1DTEwMQkND0b59+1I9V1Gj+XDG+gZaP5xn0QxHQ3lmZWXBz89POzbqYZ6entp1Zs6cid69exdbx9HRUfvvRzN+4YUXcOXKFfzwww/YvXs3OnXqhDFjxuCjjz7SWw+RmnBPExHpNX/+fHz33Xf49ddfdZZ7e3vj5s2bOn/Uy/LcSocPH9b+u6CgAEePHkV4eDgAoFmzZjh16hSCgoJQp04dnZspjZK7uzv8/f0RHx+vszw+Ph4NGjQwueZXX30VNjY2WL9+PdasWYOhQ4dqm5jw8PASX6du3bqwtbUt9lze3t4AHoypKlKafO3t7YvtyWrWrBlu3rwJOzu7YvkVjT9q1qwZzp49W+zxOnXq6Ow5LIm3tzcGDx6MdevWYcmSJfjss89MrpvIWnFPExHp1ahRI0RFReGf//ynzvIOHTrg77//xsKFC9GnTx/s3LkTO3bsgLu7e5m87rJlyxAWFobw8HAsXrwYd+/e1Q5wHjNmDFatWoX+/ftj6tSpqFatGi5cuICNGzfi888/L7EJ0WfKlCmYPn06QkND0aRJE8TExCAhIQFxcXEm1+zq6oq+ffvi7bffRkZGhs7eubfeegtPPfUUZs+ejb59++LXX3/FJ598guXLl5f4XE5OTnjmmWcwf/58BAcH4/bt23j33XdNrikoKAhJSUlISEhAQEAA3Nzc0LlzZ7Rq1Qo9e/bEwoULUbduXdy4cQPbt29Hr1690KJFC7z//vvo3r07ateujT59+sDGxgaJiYk4efIk5syZo/f13n//fTRv3hwNGzZEbm4uvv/+e22zS1QRcE8TERk0a9asYod7wsPDsXz5cixbtgyNGzfG77//XuLMstKaP38+5s+fj8aNG+PgwYP49ttvtXtBivYOFRYW4vnnn0ejRo0wYcIEeHp6SveCPOrNN9/EpEmT8NZbb6FRo0bYuXMnvv32W4SFhZWq7mHDhuHu3buIjIyEv7+/dnmzZs2wadMmbNy4EU888QTef/99zJo1q9hhz4d98cUXKCgoQPPmzTFhwgSDzYo+L7/8Mrp06YKIiAh4e3tjw4YNUBQFP/zwA5599lkMGTIEdevWRb9+/XDlyhX4+voCACIjI/H999/jxx9/xFNPPYVnnnkGixcvRmBgoMHXs7e3x9tvv40nn3wSzz77LGxtbbFx40aT6yayVop4dGACERERERXDPU1ERERERmDTRERERGQENk1ERERERmDTRERERGQENk1ERERERmDTRERERGQENk1ERERERmDTRERERGQENk1ERERERmDTRERERGQENk1ERERERmDTRERERGSE/wfnisX2rs3l/QAAAABJRU5ErkJggg==\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Volunteer Start Time **Distribution**" + ], + "metadata": { + "id": "x8m4325mSo7Q" + } + }, + { + "cell_type": "code", + "source": [ + "# Convert start_time to just hour if needed\n", + "df_user_availability['start_hour'] = pd.to_datetime(df_user_availability['start_time']).dt.hour\n", + "\n", + "# Count volunteers by start hour\n", + "hour_counts = df_user_availability['start_hour'].value_counts().sort_index()\n", + "\n", + "# Plot\n", + "plt.figure(figsize=(6, 4))\n", + "bars = plt.bar(hour_counts.index, hour_counts.values, color='darkorange')\n", + "plt.title('Volunteer Start Time Distribution')\n", + "plt.xlabel('Hour of the Day')\n", + "plt.ylabel('Number of Volunteers')\n", + "plt.grid(axis='y', linestyle='--', alpha=0.5)\n", + "\n", + "# Label counts\n", + "for bar in bars:\n", + " height = bar.get_height()\n", + " plt.text(bar.get_x() + bar.get_width()/2.0, height + 0.2, f'{int(height)}',\n", + " ha='center', va='bottom', fontsize=9)\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 407 + }, + "id": "oRleGJtrSY0x", + "outputId": "9b0d9bd6-c5bb-42d2-b18e-cc36e7141e26" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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jOICKuhhgBoCUom4ASoYYIATSq5EFQyQzMb1kCCgN8mdNbEmO9Q05jb/QmZNrIk1OURNOp0OPj4+0Ol0cj9hid0vDi8pNzcXqamp6Nu3r9nnXV1d4erqahJXq9VQq41/aRQt1HtZG1ej0Iq4MBuXLMYNUMNgElfBAJiNmz+UqLKQo6U4a2JNDlFTiffsve/f+8UlSbIqbqt9gcV9hBW5W4qzJtZUmjhrsl1NlqZvjl0vDv/3v/+NpKQkpKenY8+ePXj++eehVqvRp08fe6ZFREREZJZdjzidP38effr0wbVr1+Dn54e2bdti37598PPzs2daRERERGbZtXFauXKlPWdPREREZBW738eJiIiIqLxg40RERESkEBsnIiIiIoXYOBEREREpxMaJiIiISCE2TkREREQKsXEiIiIiUoiNExEREZFCbJyIiIiIFGLjRERERKQQGyciIiIihdg4ERERESnExomIiIhIITZORERERAqxcSIiIiJSiI0TERERkUJsnIiIiIgUYuNEREREpBAbJyIiIiKF2DgRERERKcTGiYiIiEghNk5ERERECrFxIiIiIlKIjRMRERGRQmyciIiIiBRi40RERESkEBsnIiIiIoXYOBEREREpxMaJiIiISCE2TkREREQKsXEiIiIiUoiNExEREZFCbJyIiIiIFGLjRERERKQQGyciIiIihdg4ERERESnExomIiIhIITZORERERAqxcSIiIiJSiI0TERERkUJsnIiIiIgUYuNEREREpBAbJyIiIiKF2DgRERERKcTGiYiIiEghNk5ERERECrFxIiIiIlLIYRqnGTNmQJIkjBkzxt6pEBEREZnlEI3TgQMH8NVXX6FRo0b2ToWIiIjIIrs3Trm5uYiNjcV///tfVK5c2d7pEBEREVlk98ZpxIgRePbZZ9GpUyd7p0JERER0X072nPnKlSvx22+/4cCBA4rG5+fnIz8/X36cnZ0NANDr9dDr9QAASZKgUqlgMBgghJDHWoqrVCpIkmQxrr9nEamgByBgMIkXApBggNoorkYhxD1x6e/xAioYSvSuRXEDVBBGcQEV9DBADQGpRNwAFQwwwAnFmQMqGCCZjeshQbAm1uQYNen1UKnuzstgMBjXZCGuVqshhDCKF723LcWV7gtKvY/4e9/zoNxZE2tiTY5b073zvR+7NU7nzp3D6NGjsW3bNri5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EkVHnO69rqksGQwGo+aoJFdXV7i6uprE1Wo11GrjXxpFC/Ve1sbVKLQiLszGJYtxA9QwmMRVMABm4+YPJaos5GgpzppYk0PUVOI9e+/7935xSZKsittqX2BxH2FF7pbirIk1lSbOmmxXk6Xpm2P1NU4lFXWLJb9yxRoTJkxA586dERwcjJycHCxfvhyJiYlISEh4mLSIiIiIykSpboC5ZMkSNGzYEO7u7nB3d0ejRo2wdOlSq6dz+fJl9OvXD3Xr1kXHjh1x4MABJCQkIDo6ujRpEREREZUpq484ffzxx5g4cSJGjhyJNm3aAAB++eUXvPrqq7h69SreeOMNxdP65ptvrJ09ERERkd1Y3TjNnTsX8+fPR79+/eRYt27dEBERgSlTpljVOBERERGVJ1afqsvIyEDr1q1N4q1bt0ZGRoZNkiIiIiJyRFY3TrVq1cKqVatM4t999x1q165tk6SIiIiIHJHVp+qmTp2KXr16YdeuXfI1Trt378aOHTvMNlREREREFYXiI07Hjh0DALz44ov49ddf4evriw0bNmDDhg3w9fXF/v378fzzz5dZokRERET2pviIU6NGjdCiRQsMHjwYvXv3xrfffluWeRERERE5HMVHnJKSkhAREYE333wTAQEB6N+/P37++eeyzI2IiIjIoShunNq1a4eFCxciIyMDc+fORVpaGjp06IA6depg5syZRl+cR0RERFQRWf2pOg8PDwwYMABJSUn466+/8PLLL2PevHkIDg5Gt27dyiJHIiIiIodQqq9cKVKrVi288847+M9//gNPT0/88MMPtsqLiIiIyOGU+kt+d+3ahYULF2Lt2rVQqVTo2bMnBg0aZMvciIiIiByKVY3TxYsXER8fj/j4eJw6dQqtW7fGZ599hp49e8LDw6OsciQiIiJyCIobp86dO2P79u3w9fVFv379MHDgQNStW7cscyMiIiJyKIobJ2dnZ6xZswbPPfcc1Gp1WeZERERE5JAUN07/+9//yjIPIiIiIof3UJ+qIyIiInqcsHEiIiIiUoiNExEREZFCihqnZs2a4fr16wCAadOm4ebNm2WaFBEREZEjUtQ4nThxAnl5eQCAqVOnIjc3t0yTIiIiInJEij5V16RJEwwYMABt27aFEAIfffQRNBqN2bGTJk2yaYJEREREjkJR4xQfH4/Jkydj06ZNkCQJmzdvhpOT6UslSWLjRERERBWWosapbt26WLlyJQBApVJhx44dqFq1apkmRkRERORorP6SX4PBUBZ5EBERETk8qxsnAEhNTcWcOXNw4sQJAED9+vUxevRo1KxZ06bJERERETkSq+/jlJCQgPr162P//v1o1KgRGjVqhF9//RURERHYtm1bWeRIRERE5BCsPuI0fvx4vPHGG5gxY4ZJfNy4cYiOjrZZckRERESOxOojTidOnMCgQYNM4gMHDsTx48dtkhQRERGRI7K6cfLz80NycrJJPDk5mZ+0IyIiogrN6lN1Q4YMwdChQ3H69Gm0bt0aALB7927MnDkTY8eOtXmCRERERI7C6sZp4sSJ8PT0xOzZszFhwgQAQPXq1TFlyhSMGjXK5gkSEREROQpJCCFK++KcnBwAgKenp80SskZ2dja0Wi10Oh28vLzKZiazpbKZLtHj7s1S73qIiGzKmn6iVPdxKmKvhomIiIjIHqy+OJyIiIjoccXGiYiIiEghNk5EREREClnVON25cwcdO3ZESkpKWeVDRERE5LCsapycnZ1x5MiRssqFiIiIyKFZfarulVdewTfffFMWuRARERE5NKtvR1BYWIiFCxdi+/btaN68OTw8PIye//jjj22WHBEREZEjsbpxOnbsGJo1awYA+Ouvv4yekyTeLJKIiIgqLqsbp507d5ZFHkREREQOr9S3Izh16hQSEhJw69YtAMBDfHMLERERUblgdeN07do1dOzYEXXq1EGXLl2QkZEBABg0aBDefPNNmydIRERE5CisbpzeeOMNODs74+zZs6hUqZIc79WrF7Zs2WLT5IiIiIgcidXXOG3duhUJCQkIDAw0iteuXRtnzpyxWWJEREREjsbqI055eXlGR5qKZGVlwdXV1SZJERERETkiqxundu3aYcmSJfJjSZJgMBgwa9YsPP3001ZNa/r06WjRogU8PT1RtWpV9OjRAydPnrQ2JSIiIqJHwupTdbNmzULHjh1x8OBBFBQU4O2338Yff/yBrKws7N6926ppJSUlYcSIEWjRogUKCwvxzjvv4B//+AeOHz9ucmNNIiIiInuTRCnuI6DT6fD555/j999/R25uLpo1a4YRI0YgICDgoZK5cuUKqlatiqSkJLRv3/6B47Ozs6HVaqHT6eDl5fVQ87ZoNm/qSVQm3uQtTIjIMVjTT1h9xAkAtFot3n333VIldz86nQ4A4OPjY/NpExERET2sUjVO169fxzfffIMTJ04AAOrXr48BAwY8VMNjMBgwZswYtGnTBg0aNDA7Jj8/H/n5+fLj7OxsAIBer4derwdw95orlUoFg8FgdFNOS3GVSiVfp2Uurr9nEamgByBgMIkXApBggNoorkYhxD1x6e/xAioYSlxmVhQ3QAVhFBdQQQ8D1BCQSsQNUMEAA5xQ8m93FQyQzMb1kCBYE2tyjJr0eqhUd+dlMBiMa7IQV6vVEEIYxYve25biSvcFpd5H/L3veVDurIk1sSbHrene+d6P1Y3Trl270LVrV2i1Wjz55JMAgM8++wzTpk3D999/r+gUmzkjRozAsWPH8Msvv1gcM336dEydOtUknpqaCo1GA+Du0bCAgABcunRJPoIFAL6+vvD19cWFCxeQl5cnx/39/eHt7Y309HQUFBTI8cDAQGg0GqRW7g6D5CzHw3Sb4aTPQ4rPS0Y51M5ag0K1B9K0neWYStxBnetrkedcDec9o+S4i16HcN1m6FxDkenRUo573MlEUE4istzr46p7cfOovZ2KgJsHcKlSM+jcahbXdOsYfG8dwwXPtshz9i+uKW8/vPNPI10bjQK1trimnERo7mSyJtbkGDWlpCAsLAxOTk5ISUkxrql2bRQWFiItLa24JpUKderUQV5eHs6fP19ck4sLwsPDodPpkJmZWVyThweCgoKQlZWFq1evFtdk631EaqrRzpg1sSbWVP5qSk9Ph1JWX+PUsGFDREZGYv78+VCr7/4lq9frMXz4cOzZswdHjx61ZnIAgJEjR2Ljxo3YtWsXwsLCLI4zd8SpqOiic5I2735nF//iAirgX/2siTXZq6Yxt/kXMmtiTazJIWrS6XTw8fFRdI2T1Y2Tu7s7kpOTUbduXaP4yZMn0aRJE/m765QQQuD111/H+vXrkZiYiNq1a1uTCi8OJyrPeHE4ETkIa/oJq+/j1KxZM/nappJOnDiBxo0bWzWtESNG4Ntvv8Xy5cvh6emJzMxMZGZmWtV8ERERET0qiq5xOnLkiPz/UaNGYfTo0Th16hSeeuopAMC+ffswb948zJgxw6qZz58/HwAQFRVlFF+0aBH69+9v1bSIiIiIypqiU3VF5x4fNNTc+cmyxFN1ROUYT9URkYOw+X2cSl61TkRERPS4UtQ4hYSElHUeRERERA6vVDfAvHjxIn755RdcvnzZ5KOAo0aNskliRERERI7G6sYpPj4ew4YNg4uLC6pUqQJJKnFvF0li40REREQVltWN08SJEzFp0iRMmDBBvgEVERER0ePA6s7n5s2b6N27N5smIiIieuxY3f0MGjQIq1evLotciIiIiBya1afqpk+fjueeew5btmxBw4YN4exs/F1uH3/8sc2SIyIiInIkpWqcEhIS5O+qu/ficCIiIqKKyurGafbs2Vi4cCG/EoWIiIgeO1Zf4+Tq6oo2bdqURS5EREREDs3qxmn06NGYO3duWeRCRERE5NCsPlW3f/9+/PTTT9i0aRMiIiJMLg5ft26dzZIjIiIiciRWN07e3t544YUXyiIXIiIiIodmdeO0aNGissiDiIiIyOHx9t9ERERECll9xCksLOy+92s6ffr0QyVERERE5KisbpzGjBlj9PjOnTs4fPgwtmzZgrfeestWeRERERE5HKsbp9GjR5uNz5s3DwcPHnzohIiIiIgclc2ucercuTPWrl1rq8kRERERORybNU5r1qyBj4+PrSZHRERE5HCsPlXXtGlTo4vDhRDIzMzElStX8MUXX9g0OSIiIiJHYnXj1KNHD6PHKpUKfn5+iIqKQr169WyVFxEREZHDsbpxmjx5clnkQUREROTweANMIiIiIoUUH3FSqVT3vfElAEiShMLCwodOioiIiMgRKW6c1q9fb/G5vXv34rPPPoPBYLBJUkRERESOSHHj1L17d5PYyZMnMX78eHz//feIjY3FtGnTbJocERERkSMp1TVOFy9exJAhQ9CwYUMUFhYiOTkZixcvRkhIiK3zIyIisqnPP/8cTz75JFxdXU0+KU70IFY1TjqdDuPGjUOtWrXwxx9/YMeOHfj+++/RoEGDssqPiIjIpqpXr47//Oc/GDJkiL1ToXJI8am6WbNmYebMmfD398eKFSvMnrojIiJydC+88AIAIDk5GefPn7dzNlTeKG6cxo8fD3d3d9SqVQuLFy/G4sWLzY5bt26dzZIjIiIiciSKG6d+/fo98HYERERERBWZ4sYpPj6+DNMgIiIicny8czgRERGRQlZ/Vx0REVF5VlhYKP8YDAbcvn0bKpUKLi4u9k6NygE2TkRE9Fj5v//7P0ydOlV+7O7ujg4dOiAxMdF+SVG5IQkhhL2TKK3s7GxotVrodDp4eXmVzUxm84J4ojLxZrnd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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# **User Distribution by Status**" + ], + "metadata": { + "id": "inKIDUGcat_k" + } + }, + { + "cell_type": "code", + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# Clean column names\n", + "df_user_status.columns = df_user_status.columns.str.strip()\n", + "\n", + "# Plot\n", + "plt.figure(figsize=(6, 4))\n", + "bars = plt.bar(df_user_status['user_status'], df_user_status['total_users'], color='cadetblue')\n", + "plt.title('User Distribution by Status')\n", + "plt.xlabel('User Status')\n", + "plt.ylabel('Number of Users')\n", + "plt.grid(axis='y', linestyle='--', alpha=0.5)\n", + "\n", + "# Add value labels\n", + "for bar in bars:\n", + " height = bar.get_height()\n", + " plt.text(bar.get_x() + bar.get_width()/2, height + 1, f'{int(height)}',\n", + " ha='center', va='bottom', fontsize=9)\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 407 + }, + "id": "aECq3tddVira", + "outputId": "193f1023-fbf4-44a8-ef91-b403e2874a56" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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NJ05cwY///wzPD095WUrV67EpEmTkJOTI8f0ej0cHBywYcMG9O7d2+K+LM04lRzIktmsyu5+q2NHz5pYE2tiTayJNVXFmnJzc+Hh4QGdTnfPmzhX6RmnkqYpNTUVCQkJJk0TALRu3Rq5ubk4fPgwmjVrBgD4+eefYTQa0bJlyzK3q9VqodVqzeJqtRpqtdokVvKi3sna+J3bLU9ckiSr4rbKnTWxJtbEmsoTZ02s6WGuqSyV2jjduHEDp0+flp+np6cjKSkJHh4e8Pf3x8svv4wjR45g27ZtMBgM8nSfh4cHNBoN6tevjy5dumD48OFYvnw5iouLMXr0aPTv35+fqCMiIiKbq9S36nbv3o3nnnvOLB4VFYXp06cjODjY4noJCQlo3749gNs3wBw9ejS+++47qFQq9OnTB4sXL5avVVIiLy8Pbm5uiqboiIiIqHqxpg+oMtc4VaaKbpyGxK2y+TbJevHRUZWdAhERVUHW9AEP1X2ciIiIiCoTGyciIiIihdg4ERERESnExomIiIhIITZORERERAqxcSIiIiJSiI0TERERkUJsnIiIiIgUYuNEREREpBAbJyIiIiKF2DgRERERKcTGiYiIiEghNk5ERERECrFxIiIiIlKIjRMRERGRQmyciIiIiBRi40RERESkEBsnIiIiIoXYOBEREREpxMaJiIiISCE2TkREREQKsXEiIiIiUoiNExEREZFCbJyIiIiIFGLjRERERKQQGyciIiIihdg4ERERESnExomIiIhIITZORERERAqxcSIiIiJSiI0TERERkUJsnIiIiIgUYuNEREREpBAbJyIiIiKF2DgRERERKcTGiYiIiEghNk5ERERECrFxIiIiIlKIjRMRERGRQpXaOO3duxc9evRAQEAAJEnC1q1bTZYLITB16lT4+/vD0dERnTp1QmpqqsmY7OxsDBw4EK6urnB3d8ewYcNw48aNB1gFERERPSoqtXHKz89HkyZNsHTpUovL58+fj8WLF2P58uXYv38/nJycEBkZiYKCAnnMwIEDceLECezYsQPbtm3D3r17MWLEiAdVAhERET1C7Cpz5127dkXXrl0tLhNCYNGiRfjggw/Qs2dPAMDq1avh6+uLrVu3on///khOTsb27dtx8OBBNG/eHACwZMkSvPDCC/joo48QEBDwwGohIiKi6q9SG6e7SU9PR0ZGBjp1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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "conn.close()" + ], + "metadata": { + "id": "IPNy-bCBAqTq" + }, + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file diff --git a/data-engineering/requirements.txt b/data-engineering/requirements.txt new file mode 100644 index 0000000..9d77632 --- /dev/null +++ b/data-engineering/requirements.txt @@ -0,0 +1,27 @@ +blinker==1.8.2 +click==8.1.7 +colorama==0.4.6 +deep-translator==1.11.4 +Flask==3.0.3 +Flask-Scss==0.5 +Flask-SQLAlchemy==3.1.1 +greenlet==3.0.3 +itsdangerous==2.2.0 +Jinja2==3.1.4 +langdetect==1.0.9 +MarkupSafe==2.1.5 + +numpy==2.0.1 +pandas==2.2.2 +psycopg2==2.9.9 + +psycopg2-binary==2.9.9 +pyScss==1.4.0 +python-dateutil==2.9.0.post0 +pytz==2024.1 +requests==2.32.3 +six==1.16.0 +SQLAlchemy==2.0.32 +typing_extensions==4.12.2 +Werkzeug==3.0.3 +python-dotenv diff --git a/data-engineering/scripts/deploy/deploy_aggregator.sh b/data-engineering/scripts/deploy/deploy_aggregator.sh new file mode 100644 index 0000000..ea4bf74 --- /dev/null +++ b/data-engineering/scripts/deploy/deploy_aggregator.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# Manual deploy script for the aggregator Lambda +# Usage: ./scripts/deploy/deploy_aggregator.sh +# Future: wire this into GitHub Actions on merge to main + +set -e + +FUNCTION_NAME="org-aggregator" +REGION="us-east-1" +SRC_DIR="src/aggregator" + +echo "Packaging $FUNCTION_NAME..." +cd $SRC_DIR +zip -r ../../dist/${FUNCTION_NAME}.zip . +cd ../.. + +echo "Deploying to AWS Lambda..." +aws lambda update-function-code \ + --function-name $FUNCTION_NAME \ + --zip-file fileb://dist/${FUNCTION_NAME}.zip \ + --region $REGION + +echo "Done. $FUNCTION_NAME deployed." diff --git a/data-engineering/scripts/deploy/deploy_categorizer.sh b/data-engineering/scripts/deploy/deploy_categorizer.sh new file mode 100644 index 0000000..2b462f7 --- /dev/null +++ b/data-engineering/scripts/deploy/deploy_categorizer.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# Manual deploy script for the categorizer Lambda +# Usage: ./scripts/deploy/deploy_categorizer.sh + +set -e + +FUNCTION_NAME="auto-categorizer" +REGION="us-east-1" +SRC_DIR="src/categorizer" + +echo "Packaging $FUNCTION_NAME..." +cd $SRC_DIR +zip -r ../../dist/${FUNCTION_NAME}.zip . +cd ../.. + +echo "Deploying to AWS Lambda..." +aws lambda update-function-code \ + --function-name $FUNCTION_NAME \ + --zip-file fileb://dist/${FUNCTION_NAME}.zip \ + --region $REGION + +echo "Done. $FUNCTION_NAME deployed." diff --git a/data-engineering/src/__init__.py b/data-engineering/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/data-engineering/src/aggregate-daily-metrics/__init__.py b/data-engineering/src/aggregate-daily-metrics/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/data-engineering/src/aggregate-daily-metrics/helpers.py b/data-engineering/src/aggregate-daily-metrics/helpers.py new file mode 100644 index 0000000..7589263 --- /dev/null +++ b/data-engineering/src/aggregate-daily-metrics/helpers.py @@ -0,0 +1,74 @@ +import boto3 +import json +import psycopg2 +from aws_lambda_powertools.utilities import parameters + +s3_client = boto3.client('s3') + +_creds = json.loads(parameters.get_parameter( + '/dev/saayam/db/Virginia/Analytics/user', + decrypt=True, + max_age=3600 +)) + +_db_name = _creds['DATABASE NAME'] + +_db_conn = psycopg2.connect( + host=_creds['HOST'], + user=_creds['USERNAME'], + password=_creds['PASSWORD'], + database=_db_name, + port=_creds['PORT'], + sslmode='require' +) + + +def get_requests_metrics(): + cursor = _db_conn.cursor() + + cursor.execute(f"SELECT COUNT(*) FROM {_db_name}.request") + totalRequests = cursor.fetchone()[0] + + cursor.execute(f"SELECT COUNT(*) FROM {_db_name}.request WHERE req_status_id = 3") + requestsResolved = cursor.fetchone()[0] + + return { + "totalRequests": totalRequests, + "requestsResolved": requestsResolved + } + + +def get_volunteers_metrics(): + cursor = _db_conn.cursor() + cursor.execute(f"SELECT COUNT(*) FROM {_db_name}.volunteer_details") + return {"totalVolunteers": cursor.fetchone()[0]} + + +def get_beneficiary_metrics(): + cursor = _db_conn.cursor() + cursor.execute(f"SELECT COUNT(*) FROM {_db_name}.users") + return {"totalBeneficiaries": cursor.fetchone()[0]} + + +def get_metrics(): + try: + requests_metrics = get_requests_metrics() + volunteers_metrics = get_volunteers_metrics() + beneficiaries_metrics = get_beneficiary_metrics() + + return {**requests_metrics, **volunteers_metrics, **beneficiaries_metrics} + + except psycopg2.DatabaseError as e: + raise Exception(f'Database error: {str(e)}') + except Exception as e: + raise Exception(f'Error fetching from DB: {str(e)}') + + +def write_metrics_to_s3(metrics, bucket, file_path): + print("metrics:", metrics) + s3_client.put_object( + Bucket=bucket, + Key=file_path, + Body=json.dumps(metrics, indent=2), + ContentType="application/json" + ) diff --git a/data-engineering/src/aggregate-daily-metrics/lambda_function.py b/data-engineering/src/aggregate-daily-metrics/lambda_function.py new file mode 100644 index 0000000..e1e8962 --- /dev/null +++ b/data-engineering/src/aggregate-daily-metrics/lambda_function.py @@ -0,0 +1,33 @@ +import json +from helpers import get_metrics, write_metrics_to_s3 + +def lambda_handler(event, context): + try: + + bucket = "saayam-virginia-public/", + file_path ="homepage_metrics/metrics.json" + + raw_body = event.get("body") + body = None + + if(isinstance(raw_body, str)): + body = json.loads(raw_body) + else: + body = event + + metrics = get_metrics() + + print(metrics) + + write_metrics_to_s3(metrics, bucket, file_path) + + return { + "statusCode": 200, + } + + except json.JSONDecodeError as e: + return {'statusCode': 400, 'body': json.dumps({'error': f'Invalid JSON in request body: {str(e)}'})} + except Exception as e: + return {'statusCode': 500, 'body': json.dumps({'error': f'Internal server error: {str(e)}'})} + + diff --git a/data-engineering/src/app.py b/data-engineering/src/app.py new file mode 100644 index 0000000..dc64f11 --- /dev/null +++ b/data-engineering/src/app.py @@ -0,0 +1,86 @@ +from flask import Flask, jsonify, request +from src.extensions import db +from datetime import datetime, timedelta +from src.models.fraud_requests import FraudRequests +from src import config +from src.translation.lang_detection import translate_to_english + +app = Flask(__name__) + +app.config.from_object(config) +db.init_app(app) + +with app.app_context(): + db.create_all() + +@app.route('/') +def home(): + return jsonify('Service is running') + +@app.route('/api/check_fraud', methods=['POST']) +def check_fraud(): + data = request.json + user_id = data.get('user_id') + request_datetime = data.get('request_date') + request_datetime = datetime.strptime(request_datetime, '%Y-%m-%d %H:%M:%S') + + # Calculate the time window (30 minutes before the request datetime) + time_window_start = request_datetime - timedelta(minutes=30) + + # Query the database using raw SQL + query = """ + SELECT COUNT(*) + FROM proposed_saayam.request + WHERE request_user_id = :user_id + AND submission_date BETWEEN :time_window_start AND :request_datetime + """ + result = db.session.execute( + db.text(query), + { + 'user_id': user_id, + 'time_window_start': time_window_start, + 'request_datetime': request_datetime + } + ).scalar() + is_fraud=False + reason="Request is Valid" + # Check if any request exists in the past 30 minutes + if result > 0: + is_fraud=True + reason="Already requested within last 30 mins" + + fraud_request = FraudRequests( + user_id=user_id, + request_datetime=request_datetime, + reason=reason + ) + db.session.add(fraud_request) + db.session.commit() + + response = { + "is_fraud": is_fraud, + "reason": reason + } + return jsonify(response), 200 + +# New API for language detection and translation +@app.route('/api/translate', methods=['POST']) +def translate_request_content(): + data = request.get_json() + content = data.get('content', '') + + if not content: + return jsonify({"error": "No content provided"}), 400 + + # Translate the text to English + translated_content = translate_to_english(content) + + response = { + "original": content, + "translated": translated_content + } + return jsonify(response), 200 + +# Run the application +if __name__ in "main": + app.run(debug=True) diff --git a/data-engineering/src/categorizer/__init__.py b/data-engineering/src/categorizer/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/data-engineering/src/categorizer/categories.py b/data-engineering/src/categorizer/categories.py new file mode 100644 index 0000000..fe11ba5 --- /dev/null +++ b/data-engineering/src/categorizer/categories.py @@ -0,0 +1,53 @@ +CATEGORIES = { + "Clothing Assistance": [ + "Donate Clothes", + "Borrow Clothes", + "Emergency Clothing Assistance", + "Tailoring" + ], + "Education & Career Support": [ + "College Application Help", + "SOP & Essay Review", + "Tutoring", + "Scholarship Knowledge", + "Study Group Formation", + "Career Guidance", + "Education Resource Sharing" + ], + "Elderly Community Assistance": [ + "Senior Relocation Support", + "Digital Support for Seniors", + "Medication Management", + "Medical Devices Setup", + "Errands, Events & Transportation", + "Transportation for Appointments", + "Scheduling Appointments or Tasks", + "Social Connection", + "Meal Support" + ], + "Food & Essentials": [ + "Food Assistance", + "Grocery Shopping & Delivery", + "Cooking Help" + ], + "Healthcare & Wellness": [ + "Medical Consultation", + "Medicine Delivery", + "Mental Wellbeing Support", + "Medication Reminders", + "Health Education Guidance" + ], + "Housing Assistance": [ + "Lease Support", + "Tenant Rent Support", + "Repair & Maintenance Support", + "Utilities Setup Support", + "Looking for Rental", + "Find a Roommate", + "Move-in Help", + "Packers & Movers Support", + "Buy Household Items", + "Sell Household Items" + ], + "General": [] +} \ No newline at end of file diff --git a/data-engineering/src/categorizer/classifier.py b/data-engineering/src/categorizer/classifier.py new file mode 100644 index 0000000..32ca10f --- /dev/null +++ b/data-engineering/src/categorizer/classifier.py @@ -0,0 +1,88 @@ +import os +import json +from openai import OpenAI +from dotenv import load_dotenv +from src.categorizer.categories import CATEGORIES + +load_dotenv() +client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY")) + +def build_prompt(subject: str, description: str) -> str: + category_list = "" + for cat, subcats in CATEGORIES.items(): + if subcats: + category_list += f"\n- {cat}: {', '.join(subcats)}" + else: + category_list += f"\n- {cat}: (no subcategories โ€” use as fallback only)" + + return f"""You are a classifier for a nonprofit help request platform. +Given a help request's subject and description, classify it into the most appropriate category and subcategory from the predefined list below. + +Rules: +- ONLY return values from the predefined list. Never invent new ones. +- If no category fits well, use "General" with subcategory "General". +- Return a confidence score between 0 and 1. +- Return a brief reasoning (1-2 sentences). +- Respond ONLY with a valid JSON object, no extra text. + +Predefined Categories: +{category_list} + +Help Request: +Subject: {subject} +Description: {description} + +Respond in this exact JSON format: +{{ + "category": "", + "subcategory": "", + "confidence": , + "reasoning": "" +}}""" + + +def classify_request(subject: str, description: str) -> dict: + if not subject and not description: + return { + "category": "General", + "subcategory": "General", + "confidence": 0.0, + "reasoning": "No subject or description provided." + } + + prompt = build_prompt(subject or "", description or "") + + try: + response = client.chat.completions.create( + model="gpt-3.5-turbo", # cheap and fast + messages=[{"role": "user", "content": prompt}], + temperature=0, # deterministic output + max_tokens=200 + ) + raw = response.choices[0].message.content.strip() + result = json.loads(raw) + + # Validate category exists + cat = result.get("category", "General") + subcat = result.get("subcategory", "General") + + if cat not in CATEGORIES: + cat = "General" + subcat = "General" + elif subcat not in CATEGORIES.get(cat, []) and cat != "General": + subcat = CATEGORIES[cat][0] if CATEGORIES[cat] else "General" + + return { + "category": cat, + "subcategory": subcat, + "confidence": float(result.get("confidence", 0.5)), + "reasoning": result.get("reasoning", "") + } + + except Exception as e: + return { + "category": "General", + "subcategory": "General", + "confidence": 0.0, + "reasoning": f"Classification failed: {str(e)}" + } \ No newline at end of file diff --git a/data-engineering/src/categorizer/handler.py b/data-engineering/src/categorizer/handler.py new file mode 100644 index 0000000..96c3cae --- /dev/null +++ b/data-engineering/src/categorizer/handler.py @@ -0,0 +1,33 @@ +import json +from src.categorizer.classifier import classify_request + + +def lambda_handler(event, context): + try: + # Parse body + if isinstance(event.get("body"), str): + body = json.loads(event["body"]) + else: + body = event.get("body", event) + + subject = body.get("subject", "").strip() + description = body.get("description", "").strip() + + result = classify_request(subject, description) + + return { + "statusCode": 200, + "body": result + } + + except Exception as e: + return { + "statusCode": 500, + "body": { + "error": str(e), + "category": "General", + "subcategory": "General", + "confidence": 0.0, + "reasoning": "Internal error occurred." + } + } \ No newline at end of file diff --git a/data-engineering/src/categorizer/requirements.txt b/data-engineering/src/categorizer/requirements.txt new file mode 100644 index 0000000..95eba93 --- /dev/null +++ b/data-engineering/src/categorizer/requirements.txt @@ -0,0 +1,3 @@ +boto3>=1.26.0 +google-generativeai>=0.3.0 +openai diff --git a/data-engineering/src/config.py b/data-engineering/src/config.py new file mode 100644 index 0000000..bb08265 --- /dev/null +++ b/data-engineering/src/config.py @@ -0,0 +1,5 @@ +# will keep all url and configurations + + +SQLALCHEMY_DATABASE_URI = 'postgresql://postgres:password@host.docker.internal:5432/Saayam' +SQLALCHEMY_TRACK_MODIFICATIONS=False \ No newline at end of file diff --git a/data-engineering/src/extensions.py b/data-engineering/src/extensions.py new file mode 100644 index 0000000..f0b13d6 --- /dev/null +++ b/data-engineering/src/extensions.py @@ -0,0 +1,3 @@ +from flask_sqlalchemy import SQLAlchemy + +db = SQLAlchemy() diff --git a/data-engineering/src/main.py b/data-engineering/src/main.py new file mode 100644 index 0000000..4d0de28 --- /dev/null +++ b/data-engineering/src/main.py @@ -0,0 +1,246 @@ +from fastapi import FastAPI, Depends, HTTPException, Security +from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm +from pydantic import BaseModel +import psycopg2 +import os +import jwt +from typing import List +from dotenv import load_dotenv + +# Load environment variables +load_dotenv() + +app = FastAPI() + +# Secret key for JWT +SECRET_KEY = os.getenv("SECRET_KEY", "your-secret-key") + +# OAuth2 scheme +oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") + +# Hardcoded User DB +USER_DB = { + "admin_user": {"username": "admin_user", "role": "admin"}, + "volunteer_user": {"username": "volunteer_user", "role": "volunteer"}, + "requestor_user": {"username": "requestor_user", "role": "requestor"}, +} + +# DB connection +def get_db_connection(): + try: + conn = psycopg2.connect( + host=os.getenv("DB_HOST"), + port=os.getenv("DB_PORT"), + database=os.getenv("DB_NAME"), + user=os.getenv("DB_USER"), + password=os.getenv("DB_PASSWORD") + ) + return conn + except Exception as e: + print(f"โŒ DB connection failed: {e}") + return None + +# JWT token generation +def create_jwt_token(data: dict): + return jwt.encode(data, SECRET_KEY, algorithm="HS256") + +# Get current user from token +def get_current_user(token: str = Depends(oauth2_scheme)): + try: + payload = jwt.decode(token, SECRET_KEY, algorithms=["HS256"]) + return payload + except jwt.ExpiredSignatureError: + raise HTTPException(status_code=401, detail="Token expired") + except jwt.InvalidTokenError: + raise HTTPException(status_code=401, detail="Invalid token") + +# Updated RBAC checker: allow multiple roles +def check_user_role(*allowed_roles: str): + def role_checker(user: dict = Depends(get_current_user)): + if user["role"] not in allowed_roles: + raise HTTPException(status_code=403, detail="Not authorized") + return user + return role_checker + +# ========================= Models ========================= +class UserCategoryCount(BaseModel): + user_category: str + total_users: int + +class VolunteerCount(BaseModel): + total_volunteers: int + +class VolunteerStatusSummary(BaseModel): + status: str + total_volunteers: int + +class GeographicDistribution(BaseModel): + country: str + state: str + total_requests: int + +class SkillSummary(BaseModel): + skill: str + total_volunteers: int + +class CountryUsers(BaseModel): + country: str + total_users: int + +class EmergencyContactCoverage(BaseModel): + users_with_emergency_contacts: int + +# ========================= Authentication Endpoint ========================= +@app.post("/token") +def login(form_data: OAuth2PasswordRequestForm = Depends()): + user = USER_DB.get(form_data.username) + if not user: + raise HTTPException(status_code=401, detail="Invalid credentials") + token_data = {"sub": user["username"], "role": user["role"]} + access_token = create_jwt_token(token_data) + return {"access_token": access_token, "token_type": "bearer"} + +# ========================= Analytics Endpoints (Protected) ========================= + +# Admin only +@app.get("/analytics/total_requestors", response_model=List[UserCategoryCount], dependencies=[Depends(check_user_role("admin"))]) +def get_total_users(): + conn = get_db_connection() + if not conn: + raise HTTPException(status_code=500, detail="DB connection failed") + try: + cur = conn.cursor() + cur.execute(""" + SELECT uc.user_category, COUNT(u.user_id) AS total_users + FROM user_category uc + LEFT JOIN users u ON u.user_category_id = uc.user_category_id + GROUP BY uc.user_category + ORDER BY total_users DESC; + """) + result = cur.fetchall() + return [{"user_category": row[0], "total_users": row[1]} for row in result] + finally: + cur.close() + conn.close() + +# Admin and Volunteer +@app.get("/analytics/volunteer_count", response_model=VolunteerCount, dependencies=[Depends(check_user_role("admin", "volunteer"))]) +def get_volunteer_count(): + conn = get_db_connection() + if not conn: + raise HTTPException(status_code=500, detail="DB connection failed") + try: + cur = conn.cursor() + cur.execute(""" + SELECT COUNT(DISTINCT user_id) AS total_volunteers + FROM volunteer_details; + """) + result = cur.fetchone() + return {"total_volunteers": result[0]} + finally: + cur.close() + conn.close() + +# Admin and Volunteer +@app.get("/analytics/volunteer_status", response_model=List[VolunteerStatusSummary], dependencies=[Depends(check_user_role("admin", "volunteer"))]) +def get_volunteer_status(): + conn = get_db_connection() + if not conn: + raise HTTPException(status_code=500, detail="DB connection failed") + try: + cur = conn.cursor() + cur.execute(""" + SELECT COALESCE(us.user_status, 'Unknown') AS status, COUNT(DISTINCT vd.user_id) AS total_volunteers + FROM volunteer_details vd + LEFT JOIN users u ON vd.user_id = u.user_id + LEFT JOIN user_status us ON u.user_status_id = us.user_status_id + GROUP BY us.user_status; + """) + result = cur.fetchall() + return [{"status": row[0], "total_volunteers": row[1]} for row in result] + finally: + cur.close() + conn.close() + +# Admin only +@app.get("/analytics/geographic_distribution", response_model=List[GeographicDistribution], dependencies=[Depends(check_user_role("admin"))]) +def get_geo(): + conn = get_db_connection() + if not conn: + raise HTTPException(status_code=500, detail="DB connection failed") + try: + cur = conn.cursor() + cur.execute(""" + SELECT c.country_name, s.state_name, COUNT(u.user_id) + FROM users u + JOIN country c ON u.country_id = c.country_id + JOIN state s ON u.state_id = s.state_id + GROUP BY c.country_name, s.state_name + ORDER BY COUNT(u.user_id) DESC; + """) + result = cur.fetchall() + return [{"country": row[0], "state": row[1], "total_requests": row[2]} for row in result] + finally: + cur.close() + conn.close() + +# Admin and Volunteer +@app.get("/analytics/skills", response_model=List[SkillSummary], dependencies=[Depends(check_user_role("admin", "volunteer"))]) +def get_skills(): + conn = get_db_connection() + if not conn: + raise HTTPException(status_code=500, detail="DB connection failed") + try: + cur = conn.cursor() + cur.execute(""" + SELECT TRIM(UNNEST(STRING_TO_ARRAY(skills, ','))) AS skill, + COUNT(*) AS total_volunteers + FROM volunteer_details + WHERE skills IS NOT NULL + GROUP BY skill + ORDER BY total_volunteers DESC; + """) + result = cur.fetchall() + return [{"skill": row[0], "total_volunteers": row[1]} for row in result] + finally: + cur.close() + conn.close() + +# Admin only +@app.get("/analytics/country_users", response_model=List[CountryUsers], dependencies=[Depends(check_user_role("admin"))]) +def get_country_users(): + conn = get_db_connection() + if not conn: + raise HTTPException(status_code=500, detail="DB connection failed") + try: + cur = conn.cursor() + cur.execute(""" + SELECT country, COUNT(user_id) + FROM saayam_users + GROUP BY country + ORDER BY COUNT(user_id) DESC; + """) + result = cur.fetchall() + return [{"country": row[0], "total_users": row[1]} for row in result] + finally: + cur.close() + conn.close() + +# Admin only +@app.get("/analytics/emergency_contacts", response_model=EmergencyContactCoverage, dependencies=[Depends(check_user_role("admin"))]) +def get_emergency_contacts(): + conn = get_db_connection() + if not conn: + raise HTTPException(status_code=500, detail="DB connection failed") + try: + cur = conn.cursor() + cur.execute(""" + SELECT COUNT(user_id) + FROM user_additional_details + WHERE secondary_email_1 IS NOT NULL OR secondary_phone_1 IS NOT NULL; + """) + result = cur.fetchone() + return {"users_with_emergency_contacts": result[0] if result else 0} + finally: + cur.close() + conn.close() diff --git a/data-engineering/src/models/__init__.py b/data-engineering/src/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/data-engineering/src/models/fraud_requests.py b/data-engineering/src/models/fraud_requests.py new file mode 100644 index 0000000..8ccfc75 --- /dev/null +++ b/data-engineering/src/models/fraud_requests.py @@ -0,0 +1,11 @@ +from datetime import datetime +from src.extensions import db + +class FraudRequests(db.Model): + __tablename__ = 'fraud_requests' + __table_args__ = {'schema': 'proposed_saayam'} + + fraud_request_id = db.Column(db.Integer, primary_key=True, autoincrement=True) + user_id = db.Column(db.String(255), nullable=False) + request_datetime = db.Column(db.DateTime, nullable=False, default=datetime.now) + reason=db.Column(db.String(255), nullable=True) \ No newline at end of file diff --git a/data-engineering/src/saayam-org-aggregator/helpers.py b/data-engineering/src/saayam-org-aggregator/helpers.py new file mode 100644 index 0000000..bcdf92f --- /dev/null +++ b/data-engineering/src/saayam-org-aggregator/helpers.py @@ -0,0 +1,84 @@ +import boto3 +import json +from aws_lambda_powertools.utilities import parameters +import pandas as pd +import pg8000 + + +GEN_AI_LAMBDA = "More_Org_GenAI_Py_v3126" + +# --- All cached at module level, initialized once on cold start --- +lambda_client = boto3.client('lambda') + +_creds = json.loads(parameters.get_parameter( + '/dev/saayam/db/Virginia/Analytics/user', + decrypt=True, + max_age=3600 +)) +_db_name = _creds['DATABASE NAME'] +_db_conn = pg8000.connect( + host=_creds['HOST'], + user=_creds['USERNAME'], + password=_creds['PASSWORD'], + database=_db_name, + port=_creds['PORT'], + ssl_context=True +) +# ----------------------------------------------------------------- + +def get_orgs_from_db(location, category): + try: + df = pd.read_sql( + f"SELECT * FROM {_db_name}.organizations WHERE mission = '{category}' AND city_name = '{location}'", + _db_conn + ) + df["db_or_ai"] = "db" + return df + except pg8000.DatabaseError as e: + raise Exception(f'Database error: {str(e)}') + except Exception as e: + raise Exception(f'Error fetching from DB: {str(e)}') + + +def get_ai_orgs(subject, description, location): + try: + response = lambda_client.invoke( + FunctionName=GEN_AI_LAMBDA, + InvocationType='RequestResponse', + Payload=json.dumps({ + "subject": subject, + "description": description, + "location": location + }) + ) + payload = json.loads(response['Payload'].read()) + if payload.get('statusCode') != 200: + raise Exception(f'GenAI Lambda returned error: {payload}') + orgs = pd.DataFrame(payload['body']['organizations']) + orgs["db_or_ai"] = "ai" + return orgs + except boto3.exceptions.Boto3Error as e: + raise Exception(f'Failed to invoke GenAI Lambda: {str(e)}') + except (KeyError, TypeError) as e: + raise Exception(f'Unexpected response structure from GenAI Lambda: {str(e)}') + except Exception as e: + raise Exception(f'Error fetching AI orgs: {str(e)}') + + +def merge_organizations(db_organizations, genAI_organizations): + try: + db_organizations = db_organizations.rename(columns={ + 'org_name': 'name', + 'city_name': 'location', + 'phone': 'contact' + })[['name', 'location', 'contact', 'email', 'web_url', 'mission', 'source', "db_or_ai"]] + + genAI_organizations = genAI_organizations.rename(columns={ + 'organization_name': 'name' + })[['name', 'location', 'contact', 'email', 'web_url', 'mission', 'source', "db_or_ai"]] + + return pd.concat([db_organizations, genAI_organizations], ignore_index=True) + except KeyError as e: + raise Exception(f'Missing expected column during merge: {str(e)}') + except Exception as e: + raise Exception(f'Error merging organizations: {str(e)}') \ No newline at end of file diff --git a/data-engineering/src/saayam-org-aggregator/lambda_function.py b/data-engineering/src/saayam-org-aggregator/lambda_function.py new file mode 100644 index 0000000..03ce1ba --- /dev/null +++ b/data-engineering/src/saayam-org-aggregator/lambda_function.py @@ -0,0 +1,48 @@ +import json +from helpers import get_ai_orgs, get_orgs_from_db, merge_organizations +from concurrent.futures import ThreadPoolExecutor + +# handle the lambda function call +def lambda_handler(event, context): + try: + raw_body = event.get("body") + body = json.loads(raw_body) if isinstance(raw_body, str) else event + + subject = body.get("subject") + description = body.get("description") + location = body.get("location") + category = body.get("category") + + if not location or not category: + return { + 'statusCode': 400, + 'body': json.dumps({'error': 'location and category are required fields'}) + } + + # db_organizations = get_orgs_from_db(location, category) + # genAI_organizations = get_ai_orgs(subject, description, location) + + #Implemented parallelization to speed up the reponse + + with ThreadPoolExecutor() as executor: + db_future = executor.submit(get_orgs_from_db, location, category) + ai_future = executor.submit(get_ai_orgs, subject, description, location) + + db_organizations = db_future.result() + genAI_organizations = ai_future.result() + + combined_list = merge_organizations(db_organizations, genAI_organizations) + + return { + 'statusCode': 200, + 'headers': { + "Content-Type": "application/json", + "Access-Control-Allow-Origin": '*' + }, + 'body': json.dumps(combined_list.to_dict(orient='records')) + } + + except json.JSONDecodeError as e: + return {'statusCode': 400, 'body': json.dumps({'error': f'Invalid JSON in request body: {str(e)}'})} + except Exception as e: + return {'statusCode': 500, 'body': json.dumps({'error': f'Internal server error: {str(e)}'})} diff --git a/data-engineering/src/saayam-org-aggregator/requirements.txt b/data-engineering/src/saayam-org-aggregator/requirements.txt new file mode 100644 index 0000000..f0c5d16 --- /dev/null +++ b/data-engineering/src/saayam-org-aggregator/requirements.txt @@ -0,0 +1,3 @@ +# Heavy dependencies (pandas, aws-lambda-powertools, pg8000) should be +# added as Lambda Layers on AWS - not bundled in the deployment package. +# Only add lightweight packages here that aren't in your layers. diff --git a/data-engineering/src/scrapers/__init__.py b/data-engineering/src/scrapers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/data-engineering/src/scrapers/emergency_contacts/__init__.py b/data-engineering/src/scrapers/emergency_contacts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/data-engineering/src/scrapers/emergency_contacts/cleaner.py b/data-engineering/src/scrapers/emergency_contacts/cleaner.py new file mode 100644 index 0000000..8e7eef8 --- /dev/null +++ b/data-engineering/src/scrapers/emergency_contacts/cleaner.py @@ -0,0 +1,37 @@ +import pandas as pd +import re +import os + +# Get the project root directory (data-engineering/) +PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) + +# Step 1: Load the CSV data into a DataFrame +df = pd.read_csv(os.path.join(PROJECT_ROOT, 'datasets', 'raw', 'emergency_numbers.csv')) + +# Step 2: Remove duplicate header rows +# Keep only the first occurrence of the headers +df = df[df['Country'] != 'Country'] + +# Step 3: Clean up special characters (e.g., references like [2], [3]) +# Use a regex to remove square brackets and their contents +df = df.replace(to_replace=r'\[\d+\]', value='', regex=True) + +# Step 4: Handle missing data +# Replace empty strings with None (or NaN in pandas) +df = df.replace('', None) + +# Step 5: Format the data consistently +# Example: Remove leading/trailing whitespace, fix case, etc. +df['Country'] = df['Country'].str.strip() +df['Police'] = df['Police'].str.strip() +df['Ambulance'] = df['Ambulance'].str.strip() +df['Fire'] = df['Fire'].str.strip() +df['Notes'] = df['Notes'].str.strip() + +# Optional: Normalize the case of the data (e.g., all uppercase) +df['Country'] = df['Country'].str.title() + +# Step 6: Save the cleaned DataFrame to a new CSV file +df.to_csv(os.path.join(PROJECT_ROOT, 'datasets', 'cleaned', 'cleaned_emergency_numbers.csv'), index=False) + +print("Data has been cleaned and saved to 'datasets/cleaned/cleaned_emergency_numbers.csv'.") diff --git a/data-engineering/src/scrapers/emergency_contacts/loader.py b/data-engineering/src/scrapers/emergency_contacts/loader.py new file mode 100644 index 0000000..c7d2a50 --- /dev/null +++ b/data-engineering/src/scrapers/emergency_contacts/loader.py @@ -0,0 +1,40 @@ +from flask_sqlalchemy import SQLAlchemy + +import pandas as pd +import os + +db = SQLAlchemy() + +# Get the project root directory (data-engineering/) +PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) + +# Step 1: Define the Model +class EmergencyNumber(db.Model): + __tablename__ = 'emergency_numbers' + + id = db.Column(db.Integer, primary_key=True) + country = db.Column(db.String(255), nullable=False) + police = db.Column(db.String(255)) + ambulance = db.Column(db.String(255)) + fire = db.Column(db.String(255)) + notes = db.Column(db.Text) + +# Step 2: Insert Data into the Database +def insert_data(df): + for index, row in df.iterrows(): + emergency_number = EmergencyNumber( + country=row['Country'], + police=row['Police'], + ambulance=row['Ambulance'], + fire=row['Fire'], + notes=row['Notes'] + ) + db.session.add(emergency_number) + + db.session.commit() + +df = pd.read_csv(os.path.join(PROJECT_ROOT, 'datasets', 'cleaned', 'cleaned_emergency_numbers.csv')) + +insert_data(df) + +print("Data has been inserted into the PostgreSQL database using Flask SQLAlchemy.") diff --git a/data-engineering/src/scrapers/emergency_contacts/scraper.py b/data-engineering/src/scrapers/emergency_contacts/scraper.py new file mode 100644 index 0000000..874d20a --- /dev/null +++ b/data-engineering/src/scrapers/emergency_contacts/scraper.py @@ -0,0 +1,42 @@ +import requests +from bs4 import BeautifulSoup +import pandas as pd + +# Step 1: Load the HTML data (from a local file or URL) +url = 'https://en.wikipedia.org/wiki/List_of_emergency_telephone_numbers' +response = requests.get(url) +html = response.text + +# Step 2: Parse the HTML +soup = BeautifulSoup(html, 'html.parser') + +# Step 3: Find all the tables with the class 'wikitable' +tables = soup.find_all('table', {'class': 'wikitable'}) + +# Initialize a list to hold all the rows from all tables +all_rows = [] + +# Step 4: Loop through each table and extract data +for table in tables: + headers = [] + for th in table.find_all('th'): + headers.append(th.get_text(strip=True)) + + # Extract the table rows + rows = [] + for tr in table.find_all('tr'): + cells = tr.find_all(['td', 'th']) + row = [cell.get_text(strip=True) for cell in cells] + if len(row) == len(headers): # Ensure the row has the correct number of columns + rows.append(row) + + # Append rows to all_rows + all_rows.extend(rows) + +# Step 5: Convert the aggregated data into a DataFrame +df = pd.DataFrame(all_rows, columns=headers) + +# Step 6: Save the DataFrame to a CSV file +df.to_csv('emergency_numbers.csv', index=False) + +print("Data from all tables has been extracted and saved to 'emergency_numbers.csv'.") diff --git a/data-engineering/src/scrapers/ngo/__init__.py b/data-engineering/src/scrapers/ngo/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/data-engineering/src/scrapers/ngo/afghanistan.py b/data-engineering/src/scrapers/ngo/afghanistan.py new file mode 100644 index 0000000..9aaea9f --- /dev/null +++ b/data-engineering/src/scrapers/ngo/afghanistan.py @@ -0,0 +1,86 @@ +import requests +from bs4 import BeautifulSoup +import pandas as pd + +# Base URL for the NGO listings page (with page parameter) +base_url = "https://ngobase.org/c/AF/afghanistan-ngos-charities?page={}" + + +# Function to extract data from a single page +def scrape_page(url): + # Send a request to the page + response = requests.get(url) + response.raise_for_status() # Check for request errors + + # Parse HTML content + soup = BeautifulSoup(response.text, "html.parser") + + # Find all NGO listings + ngos = soup.find_all("div", class_="my_border ngo_listing_div") + + # Lists to store extracted data + names = [] + work_areas = [] + websites = [] + facebook_links = [] + locations = [] + + # Loop through each NGO listing + for ngo in ngos: + # Extract the NGO name + name_tag = ngo.find("h3", class_="ngo_name") + name = name_tag.get_text(strip=True) if name_tag else "N/A" + + # Extract work areas and sub-areas + work_area_tags = ngo.find_all("li", class_="ngo_listing_work_area_li") + work_area_list = [wa.get_text(" -> ", strip=True) for wa in work_area_tags] + work_area = ", ".join(work_area_list) if work_area_list else "N/A" + + # Extract website and Facebook links + website_tag = ngo.find("a", title=lambda x: x and "website" in x.lower()) + facebook_tag = ngo.find("a", title=lambda x: x and "facebook" in x.lower()) + website = website_tag["href"] if website_tag else "N/A" + facebook = facebook_tag["href"] if facebook_tag else "N/A" + + # Extract location + location_tags = ngo.find_all("a", class_="listing_locations") + location = ( + ", ".join([loc.get_text(strip=True) for loc in location_tags]) + if location_tags + else "N/A" + ) + + # Append data to lists + names.append(name) + work_areas.append(work_area) + websites.append(website) + facebook_links.append(facebook) + locations.append(location) + + # Create DataFrame + df = pd.DataFrame( + { + "Name": names, + "Work Areas": work_areas, + "Website": websites, + "Facebook": facebook_links, + "Location": locations, + } + ) + + return df + + +# Initialize an empty DataFrame to store all pages' data +all_data = pd.DataFrame() + +# Loop through the pages (1 to 8) +for page in range(1, 9): # Pages 1 to 8 + url = base_url.format(page) + print(f"Scraping page {page}...") + page_data = scrape_page(url) + all_data = pd.concat([all_data, page_data], ignore_index=True) + +# Display and save the final combined data +print(all_data) +all_data.to_csv("afghanistan_ngos_combined.csv", index=False) diff --git a/data-engineering/src/scrapers/ngo/india.py b/data-engineering/src/scrapers/ngo/india.py new file mode 100644 index 0000000..3f31064 --- /dev/null +++ b/data-engineering/src/scrapers/ngo/india.py @@ -0,0 +1,102 @@ +import requests +import pandas as pd +import time +from bs4 import BeautifulSoup + +# Base URL for the request +base_url = "https://ngodarpan.gov.in/index.php/ajaxcontroller/search_index_new/" + +# Headers required for the request +headers = { + "Accept": "*/*", + "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8", + "Connection": "keep-alive", + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", + "Cookie": "ci_session=lbd52vialfao5sfecjpgbl42dgkhnb0m; ngd_csrf_cookie_name=140086eb215f2d7c09f14b2d605f54a8", + "Origin": "https://ngodarpan.gov.in", + "Referer": "https://ngodarpan.gov.in/index.php/search/", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-origin", + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36", + "X-Requested-With": "XMLHttpRequest", + "sec-ch-ua": '"Chromium";v="128", "Not;A=Brand";v="24", "Google Chrome";v="128"', + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": '"macOS"', +} + +# Data payload for the request +payload_template = { + "state_search": "", + "district_search": "", + "sector_search": "null", + "ngo_type_search": "null", + "ngo_name_search": "", + "unique_id_search": "", + "view_type": "detail_view", + "csrf_test_name": "140086eb215f2d7c09f14b2d605f54a8", # Change this value if needed +} + + +# Function to get the data for a specific page +def fetch_page_data(page_number): + payload = payload_template.copy() + response = requests.post(base_url + str(page_number), headers=headers, data=payload) + + if response.status_code == 200: + return response.content + else: + print(f"Error fetching page {page_number}: Status code {response.status_code}") + return None + + +# Function to extract relevant data from the response +def parse_data(response): + # Extract relevant fields from the response. + # This is a placeholder, you will need to adjust this according to the actual response format. + soup = BeautifulSoup(response, "html.parser") + table = soup.find("table", {"id": "example"}) # Locating the table by its ID + rows = table.find_all("tr") # Get all rows from the table + parsed_data = [] + for row in rows: + header = cols = row.find_all("th") + if len(header) != 0: + data = [col.text for col in header] + else: + cols = row.find_all("td") # Get all columns + data = [col.text for col in cols] # Extract text from each column + parsed_data.append( + { + "S.No": data[0], + "Name of VO/NGO": data[1], + "Registration No.,City & State": data[2], + "Address": data[3], + "Sectors working in": data[4], + } + ) + print(data) + print(parsed_data) + return parsed_data + + +# Initialize a list to store all the results +all_data = [] +last_page = 260569 + +# Loop over multiple pages and fetch data +for page in range(1, last_page): # Change the range as needed + # start_time = time.time() + print(f"Fetching data from page {page}...") + response = fetch_page_data(page) + if response: + page_data = parse_data(response) + all_data.extend(page_data) + else: + break + +df = pd.DataFrame(all_data) + +# Save the data to a CSV file +df.to_csv("ngo_data.csv", index=False) + +print("Data saved to ngo_data.csv") diff --git a/data-engineering/src/scrapers/ngo/malaysia.py b/data-engineering/src/scrapers/ngo/malaysia.py new file mode 100644 index 0000000..ddc43b7 --- /dev/null +++ b/data-engineering/src/scrapers/ngo/malaysia.py @@ -0,0 +1,86 @@ +import requests +from bs4 import BeautifulSoup +import pandas as pd + +# Base URL for the NGO listings page (with page parameter) +base_url = "https://ngobase.org/c/MY/malaysia-ngos-charities?page={}" + + +# Function to extract data from a single page +def scrape_page(url): + # Send a request to the page + response = requests.get(url) + response.raise_for_status() # Check for request errors + + # Parse HTML content + soup = BeautifulSoup(response.text, "html.parser") + + # Find all NGO listings + ngos = soup.find_all("div", class_="my_border ngo_listing_div") + + # Lists to store extracted data + names = [] + work_areas = [] + websites = [] + facebook_links = [] + locations = [] + + # Loop through each NGO listing + for ngo in ngos: + # Extract the NGO name + name_tag = ngo.find("h3", class_="ngo_name") + name = name_tag.get_text(strip=True) if name_tag else "N/A" + + # Extract work areas and sub-areas + work_area_tags = ngo.find_all("li", class_="ngo_listing_work_area_li") + work_area_list = [wa.get_text(" -> ", strip=True) for wa in work_area_tags] + work_area = ", ".join(work_area_list) if work_area_list else "N/A" + + # Extract website and Facebook links + website_tag = ngo.find("a", title=lambda x: x and "website" in x.lower()) + facebook_tag = ngo.find("a", title=lambda x: x and "facebook" in x.lower()) + website = website_tag["href"] if website_tag else "N/A" + facebook = facebook_tag["href"] if facebook_tag else "N/A" + + # Extract location + location_tags = ngo.find_all("a", class_="listing_locations") + location = ( + ", ".join([loc.get_text(strip=True) for loc in location_tags]) + if location_tags + else "N/A" + ) + + # Append data to lists + names.append(name) + work_areas.append(work_area) + websites.append(website) + facebook_links.append(facebook) + locations.append(location) + + # Create DataFrame + df = pd.DataFrame( + { + "Name": names, + "Work Areas": work_areas, + "Website": websites, + "Facebook": facebook_links, + "Location": locations, + } + ) + + return df + + +# Initialize an empty DataFrame to store all pages' data +all_data = pd.DataFrame() + +# Loop through the pages +for page in range(1, 34): # Pages 1 to 33 + url = base_url.format(page) + print(f"Scraping page {page}...") + page_data = scrape_page(url) + all_data = pd.concat([all_data, page_data], ignore_index=True) + +# Display and save the final combined data +print(all_data) +all_data.to_csv("malaysia_ngos_combined.csv", index=False) diff --git a/data-engineering/src/translation/__init__.py b/data-engineering/src/translation/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/data-engineering/src/translation/lang_detection.py b/data-engineering/src/translation/lang_detection.py new file mode 100644 index 0000000..d7f45a4 --- /dev/null +++ b/data-engineering/src/translation/lang_detection.py @@ -0,0 +1,18 @@ +from deep_translator import GoogleTranslator +from langdetect import detect + +def detect_language(text): + """Detects the language of the input text.""" + return detect(text) + +def translate_to_english(text): + """Translates the given text to English.""" + detected_language = detect_language(text) + + # If the text is already in English, return it as is + if detected_language == 'en': + return text + + # Translate text to English + translation = GoogleTranslator(source=detected_language, target='en').translate(text) + return translation diff --git a/data-engineering/src/utils/__init__.py b/data-engineering/src/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/data-engineering/src/utils/get_tables_info.py b/data-engineering/src/utils/get_tables_info.py new file mode 100644 index 0000000..349fcfa --- /dev/null +++ b/data-engineering/src/utils/get_tables_info.py @@ -0,0 +1,30 @@ +import psycopg2 +from dotenv import load_dotenv +import json +import os + +load_dotenv(r'C:\Users\saqui\Learning\SayamForAll\Data Engineering\data_repo\data\data-engineering\.env') + +db_params = { + "host": os.getenv('host'), + "database": os.getenv('dbname'), + "user": os.getenv('user'), + "password": os.getenv('password'), + "port": os.getenv('port') +} + +conn = psycopg2.connect(**db_params) + +cur = conn.cursor() + +cur.execute(""" + SELECT table_name + FROM information_schema.tables + WHERE table_schema = 'virginia_dev_saayam_rdbms' +""") + +rows = cur.fetchall() + +print(rows) + + diff --git a/data-engineering/test_categorizer.py b/data-engineering/test_categorizer.py new file mode 100644 index 0000000..fe0a982 --- /dev/null +++ b/data-engineering/test_categorizer.py @@ -0,0 +1,27 @@ +import sys +sys.path.insert(0, '.') + +from src.categorizer.handler import lambda_handler + +tests = [ + ("Shelter", {"subject": "I need a place to stay tonight", "description": "I lost my apartment and have two kids with me."}), + ("Food", {"subject": "Need food", "description": "My family hasn't eaten in two days, we need groceries."}), + ("Empty", {"subject": "", "description": ""}), + ("Healthcare", {"subject": "Mental health support", "description": "I have been feeling very anxious and depressed lately and need someone to talk to."}), + ("Elderly", {"subject": "Help for my grandmother", "description": "My grandmother needs a ride to her doctor's appointment next week."}), + ("Education", {"subject": "Need help with college application", "description": "I am applying to universities and need help reviewing my essay and SOP."}), + ("Clothing", {"subject": "Need warm clothes", "description": "I don't have any winter clothes and it's getting very cold outside."}), + ("Housing", {"subject": "Looking for a roommate", "description": "I need to find someone to share an apartment with to split the rent."}), + ("Vague", {"subject": "Help", "description": "I just need some help please."}), + ("Multilingual", {"subject": "Necesito comida", "description": "Mi familia no tiene que comer, necesitamos ayuda con alimentos."}), +] + +for name, body in tests: + result = lambda_handler({"body": body}, None) + b = result["body"] + print(f"Test [{name}]:") + print(f" Category : {b['category']}") + print(f" Subcategory: {b['subcategory']}") + print(f" Confidence : {b['confidence']}") + print(f" Reasoning : {b['reasoning']}") + print() \ No newline at end of file diff --git a/data-engineering/tests/.gitkeep b/data-engineering/tests/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/data-engineering/tests/__init__.py b/data-engineering/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/database/.gitkeep b/database/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/database/README.MD b/database/README.MD new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/database/README.MD @@ -0,0 +1 @@ + diff --git a/database/Saayam_Table.column.names_data.xlsx b/database/Saayam_Table.column.names_data.xlsx new file mode 100644 index 0000000..c9976bc Binary files /dev/null and b/database/Saayam_Table.column.names_data.xlsx differ diff --git a/database/lookup_tables/.gitkeep b/database/lookup_tables/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/database/lookup_tables/country.csv b/database/lookup_tables/country.csv new file mode 100644 index 0000000..0094a93 --- /dev/null +++ b/database/lookup_tables/country.csv @@ -0,0 +1,243 @@ +"country_id","country_name","phone_code","country_code","last_update_date","is_eu_member" +1,"AFGHANISTAN","93","AFG",NULL,False +2,"ALAND_ISLANDS","358","ALA",NULL,False +3,"ALBANIA","355","ALB",NULL,False +4,"ALGERIA","213","DZA",NULL,False +5,"AMERICAN_SAMOA","1-684","ASM",NULL,False +6,"ANDORRA","376","AND",NULL,False +7,"ANGOLA","244","AGO",NULL,False +8,"ANGUILLA","1-264","AIA",NULL,False +9,"ANTARCTICA","672","ATA",NULL,False +10,"ANTIGUA_AND_BARBUDA","1-268","ATG",NULL,False +11,"ARGENTINA","54","ARG",NULL,False +12,"ARMENIA","374","ARM",NULL,False +13,"ARUBA","297","ABW",NULL,False +14,"AUSTRALIA","61","AUS",NULL,False +15,"AUSTRIA","43","AUT",NULL,True +16,"AZERBAIJAN","994","AZE",NULL,False +17,"BAHAMAS","1-242","BHS",NULL,False +18,"BAHRAIN","973","BHR",NULL,False +19,"BANGLADESH","880","BGD",NULL,False +20,"BARBADOS","1-246","BRB",NULL,False +21,"BELARUS","375","BLR",NULL,False +22,"BELGIUM","32","BEL",NULL,True +23,"BELIZE","501","BLZ",NULL,False +24,"BENIN","229","BEN",NULL,False +25,"BERMUDA","1-441","BMU",NULL,False +26,"BHUTAN","975","BTN",NULL,False +27,"BOLIVIA","591","BOL",NULL,False +28,"BOSNIA_AND_HERZEGOVINA","387","BIH",NULL,False +29,"BOTSWANA","267","BWA",NULL,False +30,"BOUVET_ISLAND","47","BVT",NULL,False +31,"BRAZIL","55","BRA",NULL,False +32,"BRITISH_VIRGIN_ISLANDS","1-284","VGB",NULL,False +33,"BRUNEI_DARUSSALAM","673","BRN",NULL,False +34,"BULGARIA","359","BGR",NULL,True +35,"BURKINA_FASO","226","BFA",NULL,False +36,"BURUNDI","257","BDI",NULL,False +37,"CAMBODIA","855","KHM",NULL,False +38,"CAMEROON","237","CMR",NULL,False +39,"CANADA","1","CAN",NULL,False +40,"CAPE_VERDE","238","CV",NULL,False +41,"CAYMAN_ISLANDS","1-345","CYM",NULL,False +42,"CENTRAL_AFRICAN_REPUBLIC","236","CAF",NULL,False +43,"CHAD","235","TCD",NULL,False +44,"CHILE","56","CHL",NULL,False +45,"CHINA","86","CHN",NULL,False +47,"MACAO_SAR_CHINA","853","MO",NULL,False +48,"COLOMBIA","57","COL",NULL,False +49,"COMOROS","269","COM",NULL,False +50,"CONGO_(BRAZZAVILLE)","242","CG",NULL,False +51,"CONGO_(KINSHASA)","243","CD",NULL,False +52,"COOK_ISLANDS","682","COK",NULL,False +53,"COSTA_RICA","506","CRI",NULL,False +54,"IVORY_COAST","225","CIV",NULL,False +55,"CROATIA","385","HRV",NULL,True +56,"CUBA","53","CUB",NULL,False +57,"CYPRUS","357","CYP",NULL,True +58,"CZECH_REPUBLIC","420","CZE",NULL,False +59,"DENMARK","45","DNK",NULL,True +60,"DJIBOUTI","253","DJI",NULL,False +61,"DOMINICA","1-767","DMA",NULL,False +62,"DOMINICAN_REPUBLIC","1-829","DOM",NULL,False +63,"EAST_TIMOR","670","TL",NULL,False +64,"ECUADOR","593","ECU",NULL,False +65,"EGYPT","20","EGY",NULL,False +66,"EL_SALVADOR","503","SLV",NULL,False +67,"EQUATORIAL_GUINEA","240","GNQ",NULL,False +68,"ERITREA","291","ERI",NULL,False +69,"ESTONIA","372","EST",NULL,True +70,"ETHIOPIA","251","ETH",NULL,False +71,"FALKLAND_ISLANDS_(MALVINAS)","500","FLK",NULL,False +72,"FAROE_ISLANDS","298","FRO",NULL,False +73,"FIJI","679","FJI",NULL,False +74,"FINLAND","358","FIN",NULL,True +75,"FRANCE","33","FRA",NULL,True +76,"FRENCH_GUIANA","594","GUF",NULL,False +77,"FRENCH_POLYNESIA","689","PYF",NULL,False +78,"FRENCH_SOUTHERN_TERRITORIES","262","ATF",NULL,False +79,"GABON","241","GAB",NULL,False +80,"GAMBIA","220","GMB",NULL,False +81,"GEORGIA","995","GEO",NULL,False +82,"GERMANY","49","DEU",NULL,True +83,"GHANA","233","GHA",NULL,False +84,"GIBRALTAR","350","GIB",NULL,False +85,"GREECE","30","GRC",NULL,True +86,"GREENLAND","299","GRL",NULL,False +87,"GRENADA","1-473","GRD",NULL,False +88,"GUADELOUPE","590","GLP",NULL,False +89,"GUAM","1-671","GUM",NULL,False +90,"GUATEMALA","502","GTM",NULL,False +91,"GUERNSEY","44","GGY",NULL,False +92,"GUINEA","224","GIN",NULL,False +93,"GUINEA-BISSAU","245","GNB",NULL,False +94,"GUYANA","592","GUY",NULL,False +95,"HAITI","509","HTI",NULL,False +96,"HEARD_AND_MCDONALD_ISLANDS","672","HM",NULL,False +97,"HONDURAS","504","HND",NULL,False +98,"HONG_KONG_SAR ","853","HK",NULL,False +99,"HUNGARY","36","HUN",NULL,True +100,"ICELAND","354","ISL",NULL,False +101,"INDIA","91","IND",NULL,False +102,"INDONESIA","62","IDN",NULL,False +103,"IRAN","98","IRN",NULL,False +104,"IRAQ","964","IRQ",NULL,False +105,"IRELAND","353","IRL",NULL,True +106,"ISRAEL","972","ISR",NULL,False +107,"ITALY","39","ITA",NULL,True +108,"JAMAICA","1-876","JAM",NULL,False +109,"JAPAN","81","JPN",NULL,False +110,"JERSEY","44","JEY",NULL,False +111,"JORDAN","962","JOR",NULL,False +112,"KAZAKHSTAN","7","KAZ",NULL,False +113,"KENYA","254","KEN",NULL,False +114,"KIRIBATI","686","KIR",NULL,False +115,"NORTH_KOREA","850","KP",NULL,False +116,"SOUTH_KOREA","82","KR",NULL,False +117,"KUWAIT","965","KWT",NULL,False +118,"KYRGYZSTAN","996","KGZ",NULL,False +119,"LAOS","856","LA",NULL,False +120,"LATVIA","371","LVA",NULL,True +121,"LEBANON","961","LBN",NULL,False +122,"LESOTHO","266","LSO",NULL,False +123,"LIBERIA","231","LBR",NULL,False +124,"LIBYA","218","LBY",NULL,False +125,"LIECHTENSTEIN","423","LIE",NULL,False +126,"LITHUANIA","370","LTU",NULL,True +127,"LUXEMBOURG","352","LUX",NULL,True +129,"NORTH_MACEDONIA","389","MK",NULL,False +130,"MADAGASCAR","261","MDG",NULL,False +131,"MALAWI","265","MWI",NULL,False +132,"MALAYSIA","60","MYS",NULL,False +133,"MALDIVES","960","MDV",NULL,False +134,"MALI","223","MLI",NULL,False +135,"MALTA","356","MLT",NULL,True +137,"MARSHALL_ISLANDS","692","MHL",NULL,False +138,"MARTINIQUE","596","MTQ",NULL,False +139,"MAURITANIA","222","MRT",NULL,False +140,"MAURITIUS","230","MUS",NULL,False +141,"MAYOTTE","262","MYT",NULL,False +142,"MEXICO","52","MEX",NULL,False +143,"MICRONESIA","691","FSM",NULL,False +144,"MOLDOVA","373","MDA",NULL,False +145,"MONACO","377","MCO",NULL,False +146,"MONGOLIA","976","MNG",NULL,False +147,"MONTENEGRO","382","MNE",NULL,False +148,"MONTSERRAT","1-664","MSR",NULL,False +149,"MOROCCO","212","MAR",NULL,False +150,"MOZAMBIQUE","258","MOZ",NULL,False +151,"MYANMAR","95","MMR",NULL,False +152,"NAMIBIA","264","NAM",NULL,False +153,"NAURU","674","NRU",NULL,False +154,"NEPAL","977","NPL",NULL,False +155,"CARIBBEAN_NETHERLANDS","31","NLD",NULL,False +156,"NETHERLANDS","599","AN",NULL,True +157,"NEW_CALEDONIA","687","NCL",NULL,False +158,"NEW_ZEALAND","64","NZL",NULL,False +159,"NICARAGUA","505","NIC",NULL,False +160,"NIGER","227","NER",NULL,False +161,"NIGERIA","234","NGA",NULL,False +162,"NIUE","683","NIU",NULL,False +163,"NORFOLK_ISLAND","672","NFK",NULL,False +164,"NORTHERN_MARIANA_ISLANDS","1-670","MNP",NULL,False +165,"NORWAY","47","NOR",NULL,False +166,"OMAN","968","OMN",NULL,False +167,"PAKISTAN","92","PAK",NULL,False +168,"PALAU","680","PLW",NULL,False +169,"PALESTINIAN","970","PS",NULL,False +170,"PANAMA","507","PAN",NULL,False +171,"PAPUA_NEW_GUINEA","675","PNG",NULL,False +172,"PARAGUAY","595","PRY",NULL,False +173,"PERU","51","PER",NULL,False +174,"PHILIPPINES","63","PHL",NULL,False +175,"PITCAIRN","870","PCN",NULL,False +176,"POLAND","48","POL",NULL,True +177,"PORTUGAL","351","PRT",NULL,True +178,"PUERTO_RICO","1","PRI",NULL,False +179,"QATAR","974","QAT",NULL,False +180,"REUNION","262","REU",NULL,False +181,"ROMANIA","40","ROU",NULL,True +182,"RUSSIAN_FEDERATION","7","RUS",NULL,False +183,"RWANDA","250","RWA",NULL,False +184,"SAINT_BARTHELEMY","590","BL",NULL,False +185,"SAINT_KITTS_AND_NEVIS","1-869","KNA",NULL,False +186,"SAINT_LUCIA","1-758","LCA",NULL,False +187,"SAINT_MARTIN","590","MF",NULL,False +188,"SAINT_VINCENT_AND_GRENADINES","1-784","VC",NULL,False +189,"SAINT_HELENA","290","SH-HL",NULL,False +190,"SAINT_PIERRE_AND_MIQUELON","508","SPM",NULL,False +191,"SAMOA","685","WSM",NULL,False +192,"SAN_MARINO","378","SMR",NULL,False +193,"SAO_TOME_AND_PRINCIPE","239","STP",NULL,False +194,"SAUDI_ARABIA","966","SAU",NULL,False +195,"SENEGAL","221","SEN",NULL,False +196,"SERBIA","381","SRB",NULL,False +197,"SEYCHELLES","248","SYC",NULL,False +198,"SIERRA_LEONE","232","SLE",NULL,False +199,"SINGAPORE","65","SGP",NULL,False +200,"SLOVAKIA","421","SVK",NULL,True +201,"SLOVENIA","386","SVN",NULL,True +202,"SOLOMON_ISLANDS","677","SLB",NULL,False +203,"SOMALIA","252","SOM",NULL,False +204,"SOUTH_AFRICA","27","ZAF",NULL,False +205,"SOUTH_GEORGIA_AND_SOUTH_SANDWICH_ISLANDS","500","GS",NULL,False +206,"SOUTH_SUDAN","211","SSD",NULL,False +207,"SPAIN","34","ESP",NULL,True +208,"SRI_LANKA","94","LKA",NULL,False +209,"SUDAN","249","SDN",NULL,False +210,"SURINAME","597","SUR",NULL,False +211,"SVALBARD_AND_JAN_MAYEN_ISLANDS","47","SJ",NULL,False +212,"ESWANTINI","268","SZ",NULL,False +213,"SWEDEN","46","SWE",NULL,True +214,"SWITZERLAND","41","CHE",NULL,False +215,"SYRIA","963","SY",NULL,False +216,"TAIWAN","886","TW",NULL,False +217,"TAJIKISTAN","992","TJK",NULL,False +218,"TANZANIA","255","TZA",NULL,False +219,"THAILAND","66","THA",NULL,False +220,"TOGO","228","TGO",NULL,False +221,"TOKELAU","690","TKL",NULL,False +222,"TONGA","676","TON",NULL,False +223,"TRINIDAD_AND_TOBAGO","1-868","TTO",NULL,False +224,"TUNISIA","216","TUN",NULL,False +225,"TURKEY","90","TR",NULL,False +226,"TURKMENISTAN","993","TKM",NULL,False +227,"TURKS_AND_CAICOS_ISLANDS","1-649","TCA",NULL,False +228,"TUVALU","688","TUV",NULL,False +229,"UGANDA","256","UGA",NULL,False +230,"UKRAINE","380","UKR",NULL,False +231,"UNITED_ARAB_EMIRATES","971","ARE",NULL,False +232,"UNITED_KINGDOM","44","GBR",NULL,False +233,"UNITED_STATES_OF_AMERICA","1","USA",NULL,False +234,"US_MINOR_OUTLYING_ISLANDS","1","UM",NULL,False +235,"URUGUAY","598","URY",NULL,False +236,"UZBEKISTAN","998","UZB",NULL,False +237,"VANUATU","678","VUT",NULL,False +238,"VENEZUELA","58","VE",NULL,False +240,"VIETNAM","84","VNM",NULL,False +242,"UNITED_STATES_VIRGIN_ISLANDS","1-340","US_VI",NULL,False +243,"WALLIS_AND_FUTUNA","681","WF",NULL,False +244,"WESTERN_SAHARA","212","ESH",NULL,False +245,"YEMEN","967","YEM",NULL,False +246,"ZAMBIA","260","ZMB",NULL,False +247,"ZIMBABWE","263","ZWE",NULL,False diff --git a/database/lookup_tables/help_categories.csv b/database/lookup_tables/help_categories.csv new file mode 100644 index 0000000..3d94da0 --- /dev/null +++ b/database/lookup_tables/help_categories.csv @@ -0,0 +1,81 @@ +"cat_id","cat_name","cat_desc" +"0.0.0.0.0","GENERAL_CATEGORY","GENERAL_CATEGORY_DESC" +"1","FOOD_AND_ESSENTIALS","FOOD_AND_ESSENTIALS_DESC" +"1.1","FOOD_ASSISTANCE","FOOD_ASSISTANCE_DESC" +"1.2","GROCERY_SHOPPING_AND_DELIVERY","GROCERY_SHOPPING_AND_DELIVERY_DESC" +"1.3","COOKING_HELP","COOKING_HELP_DESC" +"1.3.1","MEAL_PREP_BASIC","MEAL_PREP_BASIC_DESC" +"1.3.2","FESTIVE_OR_BULK_COOKING","FESTIVE_OR_BULK_COOKING_DESC" +"1.3.3","NUTRITIONAL_MEAL_PLANNING","NUTRITIONAL_MEAL_PLANNING_DESC" +"1.3.4","CULTURAL_CUISINE_GUIDANCE","CULTURAL_CUISINE_GUIDANCE_DESC" +"1.3.5","OTHER_COOKING_HELP","OTHER_COOKING_HELP_DESC" +"2","CLOTHING_ASSISTANCE","CLOTHING_ASSISTANCE_DESC" +"2.1","DONATE_CLOTHES","DONATE_CLOTHES_DESC" +"2.2","BORROW_CLOTHES","BORROW_CLOTHES_DESC" +"2.3","EMERGENCY_CLOTHING_ASSISTANCE","EMERGENCY_CLOTHING_ASSISTANCE_DESC" +"2.4","TAILORING","TAILORING_DESC" +"3","HOUSING_ASSISTANCE","HOUSING_ASSISTANCE_DESC" +"3.1","LEASE_SUPPORT","LEASE_SUPPORT_DESC" +"3.10","SELL_THINGS","SELL_THINGS_DESC" +"3.2","TENANT_RENT_SUPPORT","TENANT_RENT_SUPPORT_DESC" +"3.3","REPAIR_MAINTENANCE_SUPPORT","REPAIR_MAINTENANCE_SUPPORT_DESC" +"3.3.1","PLUMBING","PLUMBING_DESC" +"3.3.10","MASONRY_OR_CONCRETE","MASONRY_OR_CONCRETE_DESC" +"3.3.11","METALWORK_OR_WELDING","METALWORK_OR_WELDING_DESC" +"3.3.12","POOL_AND_SPA_MAINTENANCE","POOL_AND_SPA_MAINTENANCE_DESC" +"3.3.13","OTHER_REPAIR_MAINTENANCE_SUPPORT","OTHER_REPAIR_MAINTENANCE_SUPPORT_DESC" +"3.3.2","HANDYMAN","HANDYMAN_DESC" +"3.3.3","ELECTRICIAN","ELECTRICIAN_DESC" +"3.3.4","CARPENTRY","CARPENTRY_DESC" +"3.3.5","GARDEN","GARDEN_DESC" +"3.3.6","HVAC_AIR_CONDITIONING","HVAC_AIR_CONDITIONING_DESC" +"3.3.7","ROOFING","ROOFING_DESC" +"3.3.8","LOCKSMITH","LOCKSMITH_DESC" +"3.3.9","PAINTING","PAINTING_DESC" +"3.4","UTILITIES_SETUP_SUPPORT","UTILITIES_SETUP_SUPPORT_DESC" +"3.5","LOOKING_FOR_RENTAL","LOOKING_FOR_RENTAL_DESC" +"3.6","FIND_ROOMATE","FIND_ROOMATE_DESC" +"3.7","MOVE_IN_HELP","MOVE_IN_HELP_DESC" +"3.8","BOOKING_PACKERS_MOVERS_SUPPORT","BOOKING_PACKERS_MOVERS_SUPPORT_DESC" +"3.9","BUY_THINGS","BUY_THINGS_DESC" +"4","EDUCATION_CAREER_SUPPORT","EDUCATION_CAREER_SUPPORT_DESC" +"4.1","COLLEGE_APPLICATION_HELP","COLLEGE_APPLICATION_HELP_DESC" +"4.2","SOP_ESSAY_REVIEW","SOP_ESSAY_REVIEW_DESC" +"4.3","TUTORING","TUTORING_DESC" +"4.3.1","MATH","MATH_DESC" +"4.3.2","ENGLISH","ENGLISH_DESC" +"4.3.3","SCIENCE","SCIENCE_DESC" +"4.3.4","COMPUTER_SCIENCE","COMPUTER_SCIENCE_DESC" +"4.3.5","TEST_PREP","TEST_PREP_DESC" +"4.3.6","OTHER_SUBJECTS","OTHER_SUBJECTS_DESC" +"4.4","SCHOLARSHIP_KNOWLEDGE","SCHOLARSHIP_KNOWLEDGE_DESC" +"4.5","STUDY_GROUP_FORMATION","STUDY_GROUP_FORMATION_DESC" +"4.6","CAREER_GUIDANCE","CAREER_GUIDANCE_DESC" +"4.7","EDUCATION_RESOURCE_SHARING","EDUCATION_RESOURCE_SHARING_DESC" +"5","HEALTHCARE_AND_WELLNESS","HEALTHCARE_AND_WELLNESS_DESC" +"5.1","MEDICAL_CONSULTATION","MEDICAL_CONSULTATION_DESC" +"5.1.1","GENERAL_CONSULTATION","GENERAL_CONSULTATION_DESC" +"5.1.10","PEDIATRICS_OR_CHILD_HEALTH","PEDIATRICS_OR_CHILD_HEALTH_DESC" +"5.1.11","OTHER_MEDICAL_CONCERN","OTHER_MEDICAL_CONCERN_DESC" +"5.1.2","ENT(EAR_NOSE_AND_THROAT)","ENT(EAR_NOSE_AND_THROAT)_DESC" +"5.1.3","DENTAL_OR_ORAL_HEALTH","DENTAL_OR_ORAL_HEALTH_DESC" +"5.1.4","EYE_OR_VISION_CARE","EYE_OR_VISION_CARE_DESC" +"5.1.5","CARDIAC_OR_BLOOD_PRESSURE","CARDIAC_OR_BLOOD_PRESSURE_DESC" +"5.1.6","ORTHOPEDIC_OR_PHYSIOTHERAPY","ORTHOPEDIC_OR_PHYSIOTHERAPY_DESC" +"5.1.7","SKIN_OR_DERMATOLOGY","SKIN_OR_DERMATOLOGY_DESC" +"5.1.8","WOMENS_OR_REPRODUCTIVE_HEALTH","WOMENS_OR_REPRODUCTIVE_HEALTH_DESC" +"5.1.9","VACCINATIONS_AND_PREVENTIVE_SCREENINGS","VACCINATIONS_AND_PREVENTIVE_SCREENINGS_DESC" +"5.2","MEDICINE_DELIVERY","MEDICINE_DELIVERY_DESC" +"5.3","MENTAL_WELLBEING_SUPPORT","MENTAL_WELLBEING_SUPPORT_DESC" +"5.4","MEDICATION_REMINDERS","MEDICATION_REMINDERS_DESC" +"5.5","HEALTH_EDUCATION_GUIDANCE","HEALTH_EDUCATION_GUIDANCE_DESC" +"6","ELDERLY_COMMUNITY_ASSISTANCE","ELDERLY_COMMUNITY_ASSISTANCE_DESC" +"6.1","SENIOR_RELOCATION_SUPPORT","SENIOR_RELOCATION_SUPPORT_DESC" +"6.2","DIGITAL_SUPPORT_FOR_SENIORS","DIGITAL_SUPPORT_FOR_SENIORS_DESC" +"6.3","MEDICATION_MANAGEMENT","MEDICATION_MANAGEMENT_DESC" +"6.4","MEDICAL_DEVICES_SETUP","MEDICAL_DEVICES_SETUP_DESC" +"6.5","ERRANDS_EVENTS_TRANSPORTATION","ERRANDS_EVENTS_TRANSPORTATION_DESC" +"6.6","TRANSPORTATION_APPOINTMENTS_EVENTS","TRANSPORTATION_APPOINTMENTS_EVENTS_DESC" +"6.7","SCHEDULING_APPOINTMENTS_OR_TASKS","SCHEDULINGG_APPOINTMENTS_OR_TASKS_DESC" +"6.8","SOCIAL_CONNECTION","SOCIAL_CONNECTION_DESC" +"6.9","MEAL_SUPPORT","MEAL_SUPPORT_DESC" diff --git a/database/lookup_tables/help_categories_map.csv b/database/lookup_tables/help_categories_map.csv new file mode 100644 index 0000000..e96db39 --- /dev/null +++ b/database/lookup_tables/help_categories_map.csv @@ -0,0 +1,81 @@ +"parent_id","child_id" +NULL,"0.0.0.0.0" +"0.0.0.0.0","1" +"1","1.1" +"1","1.2" +"1","1.3" +"1.3","1.3.1" +"1.3","1.3.2" +"1.3","1.3.3" +"1.3","1.3.4" +"1.3","1.3.5" +"0.0.0.0.0","2" +"2","2.1" +"2","2.2" +"2","2.3" +"2","2.4" +"0.0.0.0.0","3" +"3","3.1" +"3","3.10" +"3","3.2" +"3","3.3" +"3.3","3.3.1" +"3.3","3.3.10" +"3.3","3.3.11" +"3.3","3.3.12" +"3.3","3.3.13" +"3.3","3.3.2" +"3.3","3.3.3" +"3.3","3.3.4" +"3.3","3.3.5" +"3.3","3.3.6" +"3.3","3.3.7" +"3.3","3.3.8" +"3.3","3.3.9" +"3","3.4" +"3","3.5" +"3","3.6" +"3","3.7" +"3","3.8" +"3","3.9" +"0.0.0.0.0","4" +"4","4.1" +"4","4.2" +"4","4.3" +"4.3","4.3.1" +"4.3","4.3.2" +"4.3","4.3.3" +"4.3","4.3.4" +"4.3","4.3.5" +"4.3","4.3.6" +"4","4.4" +"4","4.5" +"4","4.6" +"4","4.7" +"0.0.0.0.0","5" +"5","5.1" +"5.1","5.1.1" +"5.1","5.1.10" +"5.1","5.1.11" +"5.1","5.1.2" +"5.1","5.1.3" +"5.1","5.1.4" +"5.1","5.1.5" +"5.1","5.1.6" +"5.1","5.1.7" +"5.1","5.1.8" +"5.1","5.1.9" +"5","5.2" +"5","5.3" +"5","5.4" +"5","5.5" +"0.0.0.0.0","6" +"6","6.1" +"6","6.2" +"6","6.3" +"6","6.4" +"6","6.5" +"6","6.6" +"6","6.7" +"6","6.8" +"6","6.9" diff --git a/database/lookup_tables/list_item_metadata.csv b/database/lookup_tables/list_item_metadata.csv new file mode 100644 index 0000000..a8132a2 --- /dev/null +++ b/database/lookup_tables/list_item_metadata.csv @@ -0,0 +1,815 @@ +"item_id","field_id","item_value","item_type" +"1.1.A.1","1.1.A","VEGETARIAN","radiobutton" +"1.1.A.2","1.1.A","VEGAN","radiobutton" +"1.1.A.3","1.1.A","NON_VEGETARIAN","radiobutton" +"1.1.A.4","1.1.A","GLUTEN_FREE","radiobutton" +"1.1.A.5","1.1.A","OTHER","radiobutton" +"1.1.B.1","1.1.B","DIABETIC_FRIENDLY","checkbox" +"1.1.B.2","1.1.B","KOSHER_HALAL","checkbox" +"1.1.B.3","1.1.B","NUT_FREE","checkbox" +"1.1.B.4","1.1.B","LACTOSE_FREE","checkbox" +"1.1.B.5","1.1.B","NONE","checkbox" +"1.1.B.6","1.1.B","OTHER","checkbox" +"1.2.B.1","1.2.B","MORNING_8AM_TO_12PM","radiobutton" +"1.2.B.2","1.2.B","AFTERNOON_12PM _TO_5PM","radiobutton" +"1.2.B.3","1.2.B","EVENING_5PM_TO_9PM","radiobutton" +"1.2.C.1","1.2.C","VOLUNTEER_PURCHASE_REIMBURSE","radiobutton" +"1.2.C.2","1.2.C","GIFT_CARD_VOUCHER","radiobutton" +"1.2.C.3","1.2.C","ORGANIZATION_SPONSORED","radiobutton" +"1.2.C.4","1.2.C","FREE_ASSISTANCE","radiobutton" +"1.2.D.1","1.2.D","IMMEDIATE_NEXT_24HRS","radiobutton" +"1.2.D.2","1.2.D","WITHIN_3_DAYS","radiobutton" +"1.2.D.3","1.2.D","WITHIN_1_WEEK","radiobutton" +"1.2.D.4","1.2.D","FLEXIBLE","radiobutton" +"1.3.1.A.1","1.3.1.A","VEGETARIAN","radiobutton" +"1.3.1.A.2","1.3.1.A","VEGAN","radiobutton" +"1.3.1.A.3","1.3.1.A","HIGH_PROTEIN","radiobutton" +"1.3.1.A.4","1.3.1.A","LOW_CARB","radiobutton" +"1.3.1.A.5","1.3.1.A","CULTURALLY_SPECIFIC","radiobutton" +"1.3.1.B.1","1.3.1.B","STOVE_OR_COOKTOP","checkbox" +"1.3.1.B.2","1.3.1.B","OVEN_OR_MICROWAVE","checkbox" +"1.3.1.B.3","1.3.1.B","UTENSILS_OR_COOKWARE_SET","checkbox" +"1.3.1.B.4","1.3.1.B","MIXER_OR_BLENDER","checkbox" +"1.3.1.B.5","1.3.1.B","NONE","checkbox" +"1.3.1.C.1","1.3.1.C","IMMEDIATE_NEXT_24_HOURS","radiobutton" +"1.3.1.C.2","1.3.1.C","WITHIN_3_DAYS","radiobutton" +"1.3.1.C.3","1.3.1.C","WITHIN_1_WEEK","radiobutton" +"1.3.1.C.4","1.3.1.C","FLEXIBLE","radiobutton" +"1.3.2.A.1","1.3.2.A","VEGETARIAN","radiobutton" +"1.3.2.A.2","1.3.2.A","VEGAN","radiobutton" +"1.3.2.A.3","1.3.2.A","HIGH_PROTEIN","radiobutton" +"1.3.2.A.4","1.3.2.A","LOW_CARB","radiobutton" +"1.3.2.A.5","1.3.2.A","CULTURALLY_SPECIFIC","radiobutton" +"1.3.2.B.1","1.3.2.B","STOVE_OR_COOKTOP","checkbox" +"1.3.2.B.2","1.3.2.B","OVEN_OR_MICROWAVE","checkbox" +"1.3.2.B.3","1.3.2.B","UTENSILS_OR_COOKWARE_SET","checkbox" +"1.3.2.B.4","1.3.2.B","MIXER_OR_BLENDER","checkbox" +"1.3.2.B.5","1.3.2.B","NONE","checkbox" +"1.3.2.C.1","1.3.2.C","IMMEDIATE_NEXT_24_HOURS","radiobutton" +"1.3.2.C.2","1.3.2.C","WITHIN_3_DAYS","radiobutton" +"1.3.2.C.3","1.3.2.C","WITHIN_1_WEEK","radiobutton" +"1.3.2.C.4","1.3.2.C","FLEXIBLE","radiobutton" +"1.3.3.A.1","1.3.3.A","VEGETARIAN","radiobutton" +"1.3.3.A.2","1.3.3.A","VEGAN","radiobutton" +"1.3.3.A.3","1.3.3.A","HIGH_PROTEIN","radiobutton" +"1.3.3.A.4","1.3.3.A","LOW_CARB","radiobutton" +"1.3.3.A.5","1.3.3.A","CULTURALLY_SPECIFIC","radiobutton" +"1.3.3.B.1","1.3.3.B","STOVE_OR_COOKTOP","checkbox" +"1.3.3.B.2","1.3.3.B","OVEN_OR_MICROWAVE","checkbox" +"1.3.3.B.3","1.3.3.B","UTENSILS_OR_COOKWARE_SET","checkbox" +"1.3.3.B.4","1.3.3.B","MIXER_OR_BLENDER","checkbox" +"1.3.3.B.5","1.3.3.B","NONE","checkbox" +"1.3.3.C.1","1.3.3.C","IMMEDIATE_NEXT_24_HOURS","radiobutton" +"1.3.3.C.2","1.3.3.C","WITHIN_3_DAYS","radiobutton" +"1.3.3.C.3","1.3.3.C","WITHIN_1_WEEK","radiobutton" +"1.3.3.C.4","1.3.3.C","FLEXIBLE","radiobutton" +"1.3.4.A.1","1.3.4.A","VEGETARIAN","radiobutton" +"1.3.4.A.2","1.3.4.A","VEGAN","radiobutton" +"1.3.4.A.3","1.3.4.A","HIGH_PROTEIN","radiobutton" +"1.3.4.A.4","1.3.4.A","LOW_CARB","radiobutton" +"1.3.4.A.5","1.3.4.A","CULTURALLY_SPECIFIC","radiobutton" +"1.3.4.B.1","1.3.4.B","STOVE_OR_COOKTOP","checkbox" +"1.3.4.B.2","1.3.4.B","OVEN_OR_MICROWAVE","checkbox" +"1.3.4.B.3","1.3.4.B","UTENSILS_OR_COOKWARE_SET","checkbox" +"1.3.4.B.4","1.3.4.B","MIXER_OR_BLENDER","checkbox" +"1.3.4.B.5","1.3.4.B","NONE","checkbox" +"1.3.4.C.1","1.3.4.C","IMMEDIATE_NEXT_24_HOURS","radiobutton" +"1.3.4.C.2","1.3.4.C","WITHIN_3_DAYS","radiobutton" +"1.3.4.C.3","1.3.4.C","WITHIN_1_WEEK","radiobutton" +"1.3.4.C.4","1.3.4.C","FLEXIBLE","radiobutton" +"1.3.5.A.1","1.3.5.A","VEGETARIAN","radiobutton" +"1.3.5.A.2","1.3.5.A","VEGAN","radiobutton" +"1.3.5.A.3","1.3.5.A","HIGH_PROTEIN","radiobutton" +"1.3.5.A.4","1.3.5.A","LOW_CARB","radiobutton" +"1.3.5.A.5","1.3.5.A","CULTURALLY_SPECIFIC","radiobutton" +"1.3.5.B.1","1.3.5.B","STOVE_OR_COOKTOP","checkbox" +"1.3.5.B.2","1.3.5.B","OVEN_OR_MICROWAVE","checkbox" +"1.3.5.B.3","1.3.5.B","UTENSILS_OR_COOKWARE_SET","checkbox" +"1.3.5.B.4","1.3.5.B","MIXER_OR_BLENDER","checkbox" +"1.3.5.B.5","1.3.5.B","NONE","checkbox" +"1.3.5.C.1","1.3.5.C","IMMEDIATE_NEXT_24_HOURS","radiobutton" +"1.3.5.C.2","1.3.5.C","WITHIN_3_DAYS","radiobutton" +"1.3.5.C.3","1.3.5.C","WITHIN_1_WEEK","radiobutton" +"1.3.5.C.4","1.3.5.C","FLEXIBLE","radiobutton" +"2.1.A.1","2.1.A","MEN","checkbox" +"2.1.A.2","2.1.A","WOMEN","checkbox" +"2.1.A.3","2.1.A","UNISEX","checkbox" +"2.1.B.1","2.1.B","BABY_0_2_YEARS","checkbox" +"2.1.B.2","2.1.B","CHILD_3_12_YEARS","checkbox" +"2.1.B.3","2.1.B","TEEN_13_18_YEARS","checkbox" +"2.1.B.4","2.1.B","ADULT_19_64_YEARS","checkbox" +"2.1.B.5","2.1.B","ELDERLY_65_ABOVE_YEARS","checkbox" +"2.1.C.1","2.1.C","XS","checkbox" +"2.1.C.2","2.1.C","S","checkbox" +"2.1.C.3","2.1.C","M","checkbox" +"2.1.C.4","2.1.C","L","checkbox" +"2.1.C.5","2.1.C","XL","checkbox" +"2.1.C.6","2.1.C","XXL","checkbox" +"2.1.C.7","2.1.C","XXXL","checkbox" +"2.1.D.1","2.1.D","NEW_WITH_TAGS","checkbox" +"2.1.D.2","2.1.D","LIKE_NEW","checkbox" +"2.1.D.3","2.1.D","GENTLY_USED","checkbox" +"2.1.D.4","2.1.D","WORN_BUT_USABLE","checkbox" +"2.1.D.5","2.1.D","NEEDS_REPAIR","checkbox" +"2.2.B.1","2.2.B","MEN","checkbox" +"2.2.B.2","2.2.B","WOMEN","checkbox" +"2.2.B.3","2.2.B","UNISEX","checkbox" +"2.2.C.1","2.2.C","BABY_0_2_YEARS","checkbox" +"2.2.C.2","2.2.C","CHILD_3_12_YEARS","checkbox" +"2.2.C.3","2.2.C","TEEN_13_18_YEARS","checkbox" +"2.2.C.4","2.2.C","ADULT_19_64_YEARS","checkbox" +"2.2.C.5","2.2.C","ELDERLY_65_ABOVE_YEARS","checkbox" +"2.2.D.1","2.2.D","XS","checkbox" +"2.2.D.2","2.2.D","S","checkbox" +"2.2.D.3","2.2.D","M","checkbox" +"2.2.D.4","2.2.D","L","checkbox" +"2.2.D.5","2.2.D","XL","checkbox" +"2.2.D.6","2.2.D","XXL","checkbox" +"2.2.D.7","2.2.D","XXXL","checkbox" +"2.2.E.1","2.2.E","NEW_WITH_TAGS","checkbox" +"2.2.E.2","2.2.E","LIKE_NEW","checkbox" +"2.2.E.3","2.2.E","GENTLY_USED","checkbox" +"2.2.E.4","2.2.E","WORN_BUT_CLEAN","checkbox" +"2.2.E.5","2.2.E","NEEDS_REPAIR","checkbox" +"2.2.H.1","2.2.H","BORROW_TEMPORARILY","radiobutton" +"2.2.H.2","2.2.H","REQUEST_AS_DONATION","radiobutton" +"2.3.A.1","2.3.A","MEN","checkbox" +"2.3.A.2","2.3.A","WOMEN","radiobutton" +"2.3.A.3","2.3.A","UNISEX","radiobutton" +"2.3.B.1","2.3.B","BABY_0_2_YEARS","radiobutton" +"2.3.B.2","2.3.B","CHILD_3_12_YEARS","radiobutton" +"2.3.B.3","2.3.B","TEEN_13_18_YEARS","radiobutton" +"2.3.B.4","2.3.B","ADULT_19_64_YEARS","radiobutton" +"2.3.B.5","2.3.B","ELDERLY_65_ABOVE_YEARS","radiobutton" +"2.3.C.1","2.3.C","XS","radiobutton" +"2.3.C.2","2.3.C","S","radiobutton" +"2.3.C.3","2.3.C","M","radiobutton" +"2.3.C.4","2.3.C","L","radiobutton" +"2.3.C.5","2.3.C","XL","radiobutton" +"2.3.C.6","2.3.C","XXL","radiobutton" +"2.3.C.7","2.3.C","XXXL","radiobutton" +"2.3.E.1","2.3.E","FLOOD","radiobutton" +"2.3.E.2","2.3.E","FIRE","radiobutton" +"2.3.E.3","2.3.E","EVICTION","radiobutton" +"2.3.E.4","2.3.E","OTHER","radiobutton" +"2.3.F.1","2.3.F","IMMEDIATE_LESS_THAN_6HRS","radiobutton" +"2.3.F.2","2.3.F","URGENT_LESS_THAN_24HRS","radiobutton" +"2.3.F.3","2.3.F","SOON_LESS_THAN_48HRS","radiobutton" +"2.4.A.1","2.4.A","MEN","checkbox" +"2.4.A.2","2.4.A","WOMEN","checkbox" +"2.4.A.3","2.4.A","UNISEX","checkbox" +"2.4.B.1","2.4.B","BABY_0_2_YEARS","checkbox" +"2.4.B.2","2.4.B","CHILD_3_12_YEARS","checkbox" +"2.4.B.3","2.4.B","TEEN_13_18_YEARS","checkbox" +"2.4.B.4","2.4.B","ADULT_19_64_YEARS","checkbox" +"2.4.B.5","2.4.B","ELDERLY_65_ABOVE_YEARS","checkbox" +"2.4.C.1","2.4.C","SHIRT","checkbox" +"2.4.C.2","2.4.C","PANTS","checkbox" +"2.4.C.3","2.4.C","DRESS","checkbox" +"2.4.C.4","2.4.C","SKIRT","checkbox" +"2.4.C.5","2.4.C","JACKET_COAT","checkbox" +"2.4.C.6","2.4.C","SUIT","checkbox" +"2.4.C.7","2.4.C","SAREE_TRADITIONAL_WEAR","checkbox" +"2.4.C.8","2.4.C","ACCESSORIES","checkbox" +"2.4.C.9","2.4.C","OTHER","checkbox" +"2.4.D.1","2.4.D","DROP_OFF","radiobutton" +"2.4.D.2","2.4.D","PICK_UP","radiobutton" +"2.4.D.3","2.4.D","MAIL_IN","radiobutton" +"3.10.A.1","3.10.A","FURNITURE","checkbox" +"3.10.A.2","3.10.A","MAJOR_APPLIANCES","checkbox" +"3.10.A.3","3.10.A","SMALL_ELECTRONICS","checkbox" +"3.10.A.4","3.10.A","KITCHENWARE_COOKWARE","checkbox" +"3.10.A.5","3.10.A","GARDENING_OUTDOOR_EQUIPMENT","checkbox" +"3.10.A.6","3.10.A","OTHER","checkbox" +"3.10.B.1","3.10.B","PRICING_VALUATION_GUIDANCE","checkbox" +"3.10.B.2","3.10.B","BEST_SELLING_PLATFORM","checkbox" +"3.10.B.3","3.10.B","LISTING_CREATION_PHOTO_TAKING","checkbox" +"3.10.B.4","3.10.B","BUYER_COMMUNICATION_SAFETY","checkbox" +"3.10.C.1","3.10.C","NEW_WITH_TAGS","checkbox" +"3.10.C.2","3.10.C","GENTLY_USED_GOOD_CONDITION","checkbox" +"3.10.C.3","3.10.C","USED_WEAR_AND_TEAR","checkbox" +"3.10.C.4","3.10.C","NEEDS_REPAIR","checkbox" +"3.10.D.1","3.10.D","MUST_GO_IMMEDIATELY","textbox" +"3.10.D.2","3.10.D","WITHIN_1_MONTH","textbox" +"3.10.D.3","3.10.D","FLEXIBLE","textbox" +"3.1.A.1","3.1.A","LEASE_REVIEW_PRE_SIGNING","radiobutton" +"3.1.A.2","3.1.A","LEASE_INTERPRETATION_POST_SIGNING","radiobutton" +"3.1.A.3","3.1.A","LEASE_TERMINATION_BREAK_CLAUSE_REVIEW","radiobutton" +"3.1.A.4","3.1.A","EVICTION_NOTICE_NON_RENEWAL_REVIEW","radiobutton" +"3.1.A.5","3.1.A","OTHER","radiobutton" +"3.1.B.1","3.1.B","ENGLISH","checkbox" +"3.1.B.2","3.1.B","SPANISH","checkbox" +"3.1.B.3","3.1.B","MANDARIN","checkbox" +"3.1.B.4","3.1.B","FRENCH","checkbox" +"3.1.B.5","3.1.B","OTHER","checkbox" +"3.1.C.1","3.1.C","IMMEDIATE_NEXT_24_TO_48_HOURS","radiobutton" +"3.1.C.2","3.1.C","WITHIN_1_WEEK","radiobutton" +"3.1.C.3","3.1.C","WITHIN_1_MONTH","radiobutton" +"3.1.C.4","3.1.C","FLEXIBLE","radiobutton" +"3.2.A.1","3.2.A","UNLAWFUL_RENT_INCREASE","checkbox" +"3.2.A.2","3.2.A","EVICTION_LOCKOUT_ILLEGAL_ACTION","checkbox" +"3.2.A.3","3.2.A","HEALTH_SAFETY_MAINTENANCE_ISSUES","checkbox" +"3.2.A.4","3.2.A","SECURITY_DEPOSIT_RETURN_DISPUTE","checkbox" +"3.2.A.5","3.2.A","DISCRIMINATION_HARASSMENT","checkbox" +"3.2.A.6","3.2.A","OTHER_TENANT_RIGHTS_ISSUE","checkbox" +"3.2.B.1","3.2.B","INITIAL_CONCERN_REQUESTING_ADVICE","radiobutton" +"3.2.B.2","3.2.B","FORMAL_LETTER_NOTICE EXCHANGED","radiobutton" +"3.2.B.3","3.2.B","FILED_WITH_HOUSING_TENANCY_BOARD","radiobutton" +"3.2.B.4","3.2.B","COURT_LEGAL_ACTION_INITIATED","radiobutton" +"3.2.C.1","3.2.C","LEASE_AGREEMENT","checkbox" +"3.2.C.2","3.2.C","NOTICE_OF_RENT_INCREASE_EVICTION","checkbox" +"3.2.C.3","3.2.C","COMMUNICATION_LOGS","checkbox" +"3.2.C.4","3.2.C","PHOTOS_VIDEOS_OF_ISSUE","checkbox" +"3.2.C.5","3.2.C","NO_DOCUMENTS_AVAILABLE","checkbox" +"3.2.E.1","3.2.E","IMMEDIATE_NEXT_24_TO_48_HOURS","radiobutton" +"3.2.E.2","3.2.E","WITHIN_1_WEEK","radiobutton" +"3.2.E.3","3.2.E","WITHIN_1_MONTH","radiobutton" +"3.2.E.4","3.2.E","FLEXIBLE","radiobutton" +"3.3.10.A.1","3.3.10.A","EMERGENCY_LESS_THAN_4_HOURS","radiobutton" +"3.3.10.A.2","3.3.10.A","URGENT_IN_24_HOURS","radiobutton" +"3.3.10.A.3","3.3.10.A","STANDARD_WITHIN_1_WEEK","radiobutton" +"3.3.10.A.4","3.3.10.A","FLEXIBLE","radiobutton" +"3.3.10.B.1","3.3.10.B","WEEKDAY_MORNINGS","checkbox" +"3.3.10.B.2","3.3.10.B","WEEKDAY_AFTERNOONS","checkbox" +"3.3.10.B.3","3.3.10.B","EVENINGS","checkbox" +"3.3.10.B.4","3.3.10.B","WEEKENDS","checkbox" +"3.3.11.A.1","3.3.11.A","EMERGENCY_LESS_THAN_4_HOURS","radiobutton" +"3.3.11.A.2","3.3.11.A","URGENT_IN_24_HOURS","radiobutton" +"3.3.11.A.3","3.3.11.A","STANDARD_WITHIN_1_WEEK","radiobutton" +"3.3.11.A.4","3.3.11.A","FLEXIBLE","radiobutton" +"3.3.11.B.1","3.3.11.B","WEEKDAY_MORNINGS","checkbox" +"3.3.11.B.2","3.3.11.B","WEEKDAY_AFTERNOONS","checkbox" +"3.3.11.B.3","3.3.11.B","EVENINGS","checkbox" +"3.3.11.B.4","3.3.11.B","WEEKENDS","checkbox" +"3.3.12.A.1","3.3.12.A","EMERGENCY_LESS_THAN_4_HOURS","radiobutton" +"3.3.12.A.2","3.3.12.A","URGENT_IN_24_HOURS","radiobutton" +"3.3.12.A.3","3.3.12.A","STANDARD_WITHIN_1_WEEK","radiobutton" +"3.3.12.A.4","3.3.12.A","FLEXIBLE","radiobutton" +"3.3.12.B.1","3.3.12.B","WEEKDAY_MORNINGS","checkbox" +"3.3.12.B.2","3.3.12.B","WEEKDAY_AFTERNOONS","checkbox" +"3.3.12.B.3","3.3.12.B","EVENINGS","checkbox" +"3.3.12.B.4","3.3.12.B","WEEKENDS","checkbox" +"3.3.13.A.1","3.3.13.A","EMERGENCY_LESS_THAN_4_HOURS","radiobutton" +"3.3.13.A.2","3.3.13.A","URGENT_IN_24_HOURS","radiobutton" +"3.3.13.A.3","3.3.13.A","STANDARD_WITHIN_1_WEEK","radiobutton" +"3.3.13.A.4","3.3.13.A","FLEXIBLE","radiobutton" +"3.3.13.B.1","3.3.13.B","WEEKDAY_MORNINGS","checkbox" +"3.3.13.B.2","3.3.13.B","WEEKDAY_AFTERNOONS","checkbox" +"3.3.13.B.3","3.3.13.B","EVENINGS","checkbox" +"3.3.13.B.4","3.3.13.B","WEEKENDS","checkbox" +"3.3.1.A.1","3.3.1.A","EMERGENCY_LESS_THAN_4_HOURS","radiobutton" +"3.3.1.A.2","3.3.1.A","URGENT_IN_24_HOURS","radiobutton" +"3.3.1.A.3","3.3.1.A","STANDARD_WITHIN_1_WEEK","radiobutton" +"3.3.1.A.4","3.3.1.A","FLEXIBLE","radiobutton" +"3.3.1.B.1","3.3.1.B","WEEKDAY_MORNINGS","checkbox" +"3.3.1.B.2","3.3.1.B","WEEKDAY_AFTERNOONS","checkbox" +"3.3.1.B.3","3.3.1.B","EVENINGS","checkbox" +"3.3.1.B.4","3.3.1.B","WEEKENDS","checkbox" +"3.3.2.A.1","3.3.2.A","EMERGENCY_LESS_THAN_4_HOURS","radiobutton" +"3.3.2.A.2","3.3.2.A","URGENT_IN_24_HOURS","radiobutton" +"3.3.2.A.3","3.3.2.A","STANDARD_WITHIN_1_WEEK","radiobutton" +"3.3.2.A.4","3.3.2.A","FLEXIBLE","radiobutton" +"3.3.2.B.1","3.3.2.B","WEEKDAY_MORNINGS","checkbox" +"3.3.2.B.2","3.3.2.B","WEEKDAY_AFTERNOONS","checkbox" +"3.3.2.B.3","3.3.2.B","EVENINGS","checkbox" +"3.3.2.B.4","3.3.2.B","WEEKENDS","checkbox" +"3.3.3.A.1","3.3.3.A","EMERGENCY_LESS_THAN_4_HOURS","radiobutton" +"3.3.3.A.2","3.3.3.A","URGENT_IN_24_HOURS","radiobutton" +"3.3.3.A.3","3.3.3.A","STANDARD_WITHIN_1_WEEK","radiobutton" +"3.3.3.A.4","3.3.3.A","FLEXIBLE","radiobutton" +"3.3.3.B.1","3.3.3.B","WEEKDAY_MORNINGS","checkbox" +"3.3.3.B.2","3.3.3.B","WEEKDAY_AFTERNOONS","checkbox" +"3.3.3.B.3","3.3.3.B","EVENINGS","checkbox" +"3.3.3.B.4","3.3.3.B","WEEKENDS","checkbox" +"3.3.4.A.1","3.3.4.A","EMERGENCY_LESS_THAN_4_HOURS","radiobutton" +"3.3.4.A.2","3.3.4.A","URGENT_IN_24_HOURS","radiobutton" +"3.3.4.A.3","3.3.4.A","STANDARD_WITHIN_1_WEEK","radiobutton" +"3.3.4.A.4","3.3.4.A","FLEXIBLE","radiobutton" +"3.3.4.B.1","3.3.4.B","WEEKDAY_MORNINGS","checkbox" +"3.3.4.B.2","3.3.4.B","WEEKDAY_AFTERNOONS","checkbox" +"3.3.4.B.3","3.3.4.B","EVENINGS","checkbox" +"3.3.4.B.4","3.3.4.B","WEEKENDS","checkbox" +"3.3.5.A.1","3.3.5.A","EMERGENCY_LESS_THAN_4_HOURS","radiobutton" +"3.3.5.A.2","3.3.5.A","URGENT_IN_24_HOURS","radiobutton" +"3.3.5.A.3","3.3.5.A","STANDARD_WITHIN_1_WEEK","radiobutton" +"3.3.5.A.4","3.3.5.A","FLEXIBLE","radiobutton" +"3.3.5.B.1","3.3.5.B","WEEKDAY_MORNINGS","checkbox" +"3.3.5.B.2","3.3.5.B","WEEKDAY_AFTERNOONS","checkbox" +"3.3.5.B.3","3.3.5.B","EVENINGS","checkbox" +"3.3.5.B.4","3.3.5.B","WEEKENDS","checkbox" +"3.3.6.A.1","3.3.6.A","EMERGENCY_LESS_THAN_4_HOURS","radiobutton" +"3.3.6.A.2","3.3.6.A","URGENT_IN_24_HOURS","radiobutton" +"3.3.6.A.3","3.3.6.A","STANDARD_WITHIN_1_WEEK","radiobutton" +"3.3.6.A.4","3.3.6.A","FLEXIBLE","radiobutton" +"3.3.6.B.1","3.3.6.B","WEEKDAY_MORNINGS","checkbox" +"3.3.6.B.2","3.3.6.B","WEEKDAY_AFTERNOONS","checkbox" +"3.3.6.B.3","3.3.6.B","EVENINGS","checkbox" +"3.3.6.B.4","3.3.6.B","WEEKENDS","checkbox" +"3.3.7.A.1","3.3.7.A","EMERGENCY_LESS_THAN_4_HOURS","radiobutton" +"3.3.7.A.2","3.3.7.A","URGENT_IN_24_HOURS","radiobutton" +"3.3.7.A.3","3.3.7.A","STANDARD_WITHIN_1_WEEK","radiobutton" +"3.3.7.A.4","3.3.7.A","FLEXIBLE","radiobutton" +"3.3.7.B.1","3.3.7.B","WEEKDAY_MORNINGS","checkbox" +"3.3.7.B.2","3.3.7.B","WEEKDAY_AFTERNOONS","checkbox" +"3.3.7.B.3","3.3.7.B","EVENINGS","checkbox" +"3.3.7.B.4","3.3.7.B","WEEKENDS","checkbox" +"3.3.8.A.1","3.3.8.A","EMERGENCY_LESS_THAN_4_HOURS","radiobutton" +"3.3.8.A.2","3.3.8.A","URGENT_IN_24_HOURS","radiobutton" +"3.3.8.A.3","3.3.8.A","STANDARD_WITHIN_1_WEEK","radiobutton" +"3.3.8.A.4","3.3.8.A","FLEXIBLE","radiobutton" +"3.3.8.B.1","3.3.8.B","WEEKDAY_MORNINGS","checkbox" +"3.3.8.B.2","3.3.8.B","WEEKDAY_AFTERNOONS","checkbox" +"3.3.8.B.3","3.3.8.B","EVENINGS","checkbox" +"3.3.8.B.4","3.3.8.B","WEEKENDS","checkbox" +"3.3.9.A.1","3.3.9.A","EMERGENCY_LESS_THAN_4_HOURS","radiobutton" +"3.3.9.A.2","3.3.9.A","URGENT_IN_24_HOURS","radiobutton" +"3.3.9.A.3","3.3.9.A","STANDARD_WITHIN_1_WEEK","radiobutton" +"3.3.9.A.4","3.3.9.A","FLEXIBLE","radiobutton" +"3.3.9.B.1","3.3.9.B","WEEKDAY_MORNINGS","checkbox" +"3.3.9.B.2","3.3.9.B","WEEKDAY_AFTERNOONS","checkbox" +"3.3.9.B.3","3.3.9.B","EVENINGS","checkbox" +"3.3.9.B.4","3.3.9.B","WEEKENDS","checkbox" +"3.4.A.1","3.4.A","UTILITY_CONNECTION","checkbox" +"3.4.A.10","3.4.A","GARDEN_CARE","checkbox" +"3.4.A.11","3.4.A","OTHER","checkbox" +"3.4.A.2","3.4.A","INTERNET_SETUP","checkbox" +"3.4.A.3","3.4.A","CABLE_SETUP","checkbox" +"3.4.A.4","3.4.A","PHONE_SETUP","checkbox" +"3.4.A.5","3.4.A","TV_INSTALLATION","checkbox" +"3.4.A.6","3.4.A","WIFI_SETUP","checkbox" +"3.4.A.7","3.4.A","FURNITURE_ASSEMBLY_SETUP","checkbox" +"3.4.A.8","3.4.A","HOUSEHOLD_GOODS","checkbox" +"3.4.A.9","3.4.A","GENERAL_OUTDOOR_MAINTENANCE","checkbox" +"3.4.B.1","3.4.B","AVAILABLE_AT_LOCATION","radiobutton" +"3.4.B.2","3.4.B","BEFORE_MOVE_IN","radiobutton" +"3.4.B.3","3.4.B","POST_MOVE_IN","radiobutton" +"3.4.B.4","3.4.B","FLEXIBLE","radiobutton" +"3.5.A.1","3.5.A","APARTMENT_CONDO","radiobutton" +"3.5.A.2","3.5.A","HOUSE_TOWNHOME","radiobutton" +"3.5.A.3","3.5.A","ROOM_SHARED_HOUSING","radiobutton" +"3.5.A.4","3.5.A","STUDIO","radiobutton" +"3.5.B.1","3.5.B","NEW_LEASE","radiobutton" +"3.5.B.2","3.5.B","SUBLET","radiobutton" +"3.5.B.3","3.5.B","LEASE_TRANSFER","radiobutton" +"3.5.B.4","3.5.B","MONTH_TO_MONTH","radiobutton" +"3.5.B.5","3.5.B","DOESNT_MATTER","radiobutton" +"3.5.C.1","3.5.C","MINIMUM_BUDGET","currency" +"3.5.C.2","3.5.C","MAXIMUM_BUDGET","currency" +"3.5.D.1","3.5.D","IMMEDIATELY","radiobutton" +"3.5.D.2","3.5.D","WITHIN_1_MONTH","radiobutton" +"3.5.D.3","3.5.D","1_TO_3_MONTHS","radiobutton" +"3.5.D.4","3.5.D","FLEXIBLE","radiobutton" +"3.5.E.1","3.5.E","SAME_GENDER","checkbox" +"3.5.E.2","3.5.E","PET_FRIENDLY","checkbox" +"3.5.E.3","3.5.E","NON_SMOKING","checkbox" +"3.5.E.4","3.5.E","WORK_SCHEDULE","checkbox" +"3.5.E.5","3.5.E","GUEST_POLICY","checkbox" +"3.5.H.1","3.5.H","PARKING_SPACE_AVAILABLE","checkbox" +"3.5.H.2","3.5.H","FURNITURE_PROVIDED","checkbox" +"3.6.A.1","3.6.A","LISTING_A_FULL_UNIT","radiobutton" +"3.6.A.2","3.6.A","LISTING_A_ROOM","radiobutton" +"3.6.B.1","3.6.B","APARTMENT_CONDO","radiobutton" +"3.6.B.2","3.6.B","HOUSE_TOWNHOME","radiobutton" +"3.6.B.3","3.6.B","ROOM_SHARED_HOUSING","radiobutton" +"3.6.C.1","3.6.C","NEW_LEASE","radiobutton" +"3.6.C.2","3.6.C","SUBLET","radiobutton" +"3.6.C.3","3.6.C","LEASE_TRANSFER","radiobutton" +"3.6.C.4","3.6.C","MONTH_TO_MONTH","radiobutton" +"3.6.C.5","3.6.C","DOESNT_MATTER","radiobutton" +"3.6.E.1","3.6.E","UTILITED_INCLUDED","radiobutton" +"3.6.E.2","3.6.E","UTILITIES_NOT_INCLUDED","radiobutton" +"3.6.E.3","3.6.E","UTILITIES_PARTIALLY_INCLUDED","radiobutton" +"3.6.F.1","3.6.F","IMMEDIATELY","radiobutton" +"3.6.F.2","3.6.F","WITHIN_1_MONTH","radiobutton" +"3.6.F.3","3.6.F","1_TO_3_MONTHS","radiobutton" +"3.6.F.4","3.6.F","FLEXIBLE","radiobutton" +"3.6.H.1","3.6.H","PRIVATE_BATHROOM","checkbox" +"3.6.H.2","3.6.H","PARKING_AVAILABLE","checkbox" +"3.6.H.3","3.6.H","FURNITURE_PROVIDED","checkbox" +"3.6.I.1","3.6.I","MEN","radiobutton" +"3.6.I.2","3.6.I","WOMEN","radiobutton" +"3.6.I.3","3.6.I","UNISEX","radiobutton" +"3.6.J.1","3.6.J","MIN_AGE","integer" +"3.6.J.2","3.6.J","MAX_AGE","integer" +"3.6.K.1","3.6.K","PET_FRIENDLY","checkbox" +"3.6.K.2","3.6.K","NON_SMOKING","checkbox" +"3.7.A.1","3.7.A","PACKING_UNPACKING","checkbox" +"3.7.A.2","3.7.A","LOADING_UNLOADING","checkbox" +"3.7.A.3","3.7.A","DRIVING_TRANSPORTATION","checkbox" +"3.7.A.4","3.7.A","MINOR_ASSEMBLY_SETUP","checkbox" +"3.7.A.5","3.7.A","OTHER","checkbox" +"3.7.C.1","3.7.C","1_TO_2_HOURS","radiobutton" +"3.7.C.2","3.7.C","2_TO_4_HOURS","radiobutton" +"3.7.C.3","3.7.C","4_TO_8_HOURS","radiobutton" +"3.7.C.4","3.7.C","FULL_DAY","radiobutton" +"3.7.E.1","3.7.E","MINIMAL_FEW_BOXES","radiobutton" +"3.7.E.2","3.7.E","SMALL_STUDIO_ROOM","radiobutton" +"3.7.E.3","3.7.E","MEDIUM_1_BEDROOM","radiobutton" +"3.7.E.4","3.7.E","LARGE_2MORE_BEDROOM","radiobutton" +"3.8.A.1","3.8.A","FULL_PACKING_AND_MOVING","checkbox" +"3.8.A.2","3.8.A","MOVING_ONLY","checkbox" +"3.8.A.3","3.8.A","PACKING_ONLY","checkbox" +"3.8.A.4","3.8.A","SPECIALTY_ITEM_MOVING","checkbox" +"3.8.C.1","3.8.C","MINIMAL_FEW_BOXES","textbox" +"3.8.C.2","3.8.C","SMALL_STUDIO_ROOM","textbox" +"3.8.C.3","3.8.C","MEDIUM_1_BEDROOM","textbox" +"3.8.C.4","3.8.C","LARGE_2_MORE_BEDROOM","textbox" +"3.8.D.1","3.8.D","MINIMUM_BUDGET","currency" +"3.8.D.2","3.8.D","MAXIMUM_BUDGET","currency" +"3.9.A.1","3.9.A","FURNITURE","checkbox" +"3.9.A.2","3.9.A","MAJOR_APPLIANCES","checkbox" +"3.9.A.3","3.9.A","SMALL_ELECTRONICS","checkbox" +"3.9.A.4","3.9.A","KITCHENWARE_COOKWARE","checkbox" +"3.9.A.5","3.9.A","GARDENING_OUTDOOR_EQUIPMENT","checkbox" +"3.9.A.6","3.9.A","OTHER","checkbox" +"3.9.B.1","3.9.B","VALUATION_GUIDANCE","checkbox" +"3.9.B.2","3.9.B","CHOOSE_BEST_SELL_PLATFORM","checkbox" +"3.9.B.3","3.9.B","CREATE_LISTING","checkbox" +"3.9.B.4","3.9.B","BUYER_COMMUNICATION","checkbox" +"3.9.C.1","3.9.C","MINIMUM_BUDGET","currency" +"3.9.C.2","3.9.C","MAXIMUM_BUDGET","currency" +"3.9.E.1","3.9.E","IMMEDIATE_NEXT_48_HOURS","radiobutton" +"3.9.E.2","3.9.E","WITHIN_1_WEEK","radiobutton" +"3.9.E.3","3.9.E","WITHIN_1_MONTH","radiobutton" +"3.9.E.4","3.9.E","FLEXIBLE","radiobutton" +"3.9.F.1","3.9.F","NEW_ITEMS_ONLY","radiobutton" +"3.9.F.2","3.9.F","USED","radiobutton" +"3.9.F.3","3.9.F","REPAIR_OR_REFURBISING","radiobutton" +"3.9.F.4","3.9.F","BUDGET_FRIENDLY_OPTIONS","radiobutton" +"4.1.A.1","4.1.A","APPLICATION_FORM_GUIDANCE","checkbox" +"4.1.A.2","4.1.A","COMMON_APP_OR_COALITION APP_HELP","checkbox" +"4.1.A.3","4.1.A","RESUME_BUILDING","checkbox" +"4.1.A.4","4.1.A","CHOOSING_MAJORS_OR_COLLEGES","checkbox" +"4.1.A.5","4.1.A","INTERVIEW_PREPARATION","checkbox" +"4.2.A.1","4.2.A","STATEMENT_OF_PURPOSE_SOP","radiobutton" +"4.2.A.2","4.2.A","ADMISSION_ESSAY","radiobutton" +"4.2.A.3","4.2.A","SCHOLARSHIP_ESSAY","radiobutton" +"4.2.A.4","4.2.A","PERSONAL_STATEMENT","radiobutton" +"4.2.B.1","4.2.B","GRAMMAR_AND_SPELLING","checkbox" +"4.2.B.2","4.2.B","STRUCTURE_AND_FLOW","checkbox" +"4.2.B.3","4.2.B","CONTENT_SUGGESTIONS","checkbox" +"4.2.B.4","4.2.B","FULL_REVIEW","checkbox" +"4.3.1.A.1","4.3.1.A","CONCEPT_EXPLANATION","checkbox" +"4.3.1.A.2","4.3.1.A","PROBLEM_SOLVING_PRACTICE","checkbox" +"4.3.1.A.3","4.3.1.A","HOMEWORK_GUIDANCE","checkbox" +"4.3.1.A.4","4.3.1.A","EXAM_PREPARATION","checkbox" +"4.3.1.A.5","4.3.1.A","PRACTICE_TEST_REVIEW","checkbox" +"4.3.1.B.1","4.3.1.B","ELEMENTARY_SCHOOL","radiobutton" +"4.3.1.B.2","4.3.1.B","MIDDLE_SCHOOL","radiobutton" +"4.3.1.B.3","4.3.1.B","HIGH_SCHOOL","radiobutton" +"4.3.1.B.4","4.3.1.B","COLLEGE","radiobutton" +"4.3.1.B.5","4.3.1.B","UNIVERSITY","radiobutton" +"4.3.1.B.6","4.3.1.B","PHD","radiobutton" +"4.3.1.C.1","4.3.1.C","MINIMUM_FEE","currency" +"4.3.1.C.2","4.3.1.C","MAXIMUM_FEE","currency" +"4.3.2.A.1","4.3.2.A","CONCEPT_EXPLANATION","checkbox" +"4.3.2.A.2","4.3.2.A","PROBLEM_SOLVING_PRACTICE","checkbox" +"4.3.2.A.3","4.3.2.A","HOMEWORK_GUIDANCE","checkbox" +"4.3.2.A.4","4.3.2.A","EXAM_PREPARATION","checkbox" +"4.3.2.A.5","4.3.2.A","PRACTICE_TEST_REVIEW","checkbox" +"4.3.2.B.1","4.3.2.B","ELEMENTARY_SCHOOL","radiobutton" +"4.3.2.B.2","4.3.2.B","MIDDLE_SCHOOL","radiobutton" +"4.3.2.B.3","4.3.2.B","HIGH_SCHOOL","radiobutton" +"4.3.2.B.4","4.3.2.B","COLLEGE","radiobutton" +"4.3.2.B.5","4.3.2.B","UNIVERSITY","radiobutton" +"4.3.2.B.6","4.3.2.B","PHD","radiobutton" +"4.3.2.C.1","4.3.2.C","MINIMUM_FEE","currency" +"4.3.2.C.2","4.3.2.C","MAXIMUM_FEE","currency" +"4.3.3.A.1","4.3.3.A","CONCEPT_EXPLANATION","checkbox" +"4.3.3.A.2","4.3.3.A","PROBLEM_SOLVING_PRACTICE","checkbox" +"4.3.3.A.3","4.3.3.A","HOMEWORK_GUIDANCE","checkbox" +"4.3.3.A.4","4.3.3.A","EXAM_PREPARATION","checkbox" +"4.3.3.A.5","4.3.3.A","PRACTICE_TEST_REVIEW","checkbox" +"4.3.3.B.1","4.3.3.B","ELEMENTARY_SCHOOL","radiobutton" +"4.3.3.B.2","4.3.3.B","MIDDLE_SCHOOL","radiobutton" +"4.3.3.B.3","4.3.3.B","HIGH_SCHOOL","radiobutton" +"4.3.3.B.4","4.3.3.B","COLLEGE","radiobutton" +"4.3.3.B.5","4.3.3.B","UNIVERSITY","radiobutton" +"4.3.3.B.6","4.3.3.B","PHD","radiobutton" +"4.3.3.C.1","4.3.3.C","MINIMUM_FEE","currency" +"4.3.3.C.2","4.3.3.C","MAXIMUM_FEE","currency" +"4.3.4.A.1","4.3.4.A","CONCEPT_EXPLANATION","checkbox" +"4.3.4.A.2","4.3.4.A","PROBLEM_SOLVING_PRACTICE","checkbox" +"4.3.4.A.3","4.3.4.A","HOMEWORK_GUIDANCE","checkbox" +"4.3.4.A.4","4.3.4.A","EXAM_PREPARATION","checkbox" +"4.3.4.A.5","4.3.4.A","PRACTICE_TEST_REVIEW","checkbox" +"4.3.4.B.1","4.3.4.B","ELEMENTARY_SCHOOL","radiobutton" +"4.3.4.B.2","4.3.4.B","MIDDLE_SCHOOL","radiobutton" +"4.3.4.B.3","4.3.4.B","HIGH_SCHOOL","radiobutton" +"4.3.4.B.4","4.3.4.B","COLLEGE","radiobutton" +"4.3.4.B.5","4.3.4.B","UNIVERSITY","radiobutton" +"4.3.4.B.6","4.3.4.B","PHD","radiobutton" +"4.3.4.C.1","4.3.4.C","MINIMUM_FEE","currency" +"4.3.4.C.2","4.3.4.C","MAXIMUM_FEE","currency" +"4.3.5.A.1","4.3.5.A","CONCEPT_EXPLANATION","checkbox" +"4.3.5.A.2","4.3.5.A","PROBLEM_SOLVING_PRACTICE","checkbox" +"4.3.5.A.3","4.3.5.A","HOMEWORK_GUIDANCE","checkbox" +"4.3.5.A.4","4.3.5.A","EXAM_PREPARATION","checkbox" +"4.3.5.A.5","4.3.5.A","PRACTICE_TEST_REVIEW","checkbox" +"4.3.5.B.1","4.3.5.B","ELEMENTARY_SCHOOL","radiobutton" +"4.3.5.B.2","4.3.5.B","MIDDLE_SCHOOL","radiobutton" +"4.3.5.B.3","4.3.5.B","HIGH_SCHOOL","radiobutton" +"4.3.5.B.4","4.3.5.B","COLLEGE","radiobutton" +"4.3.5.B.5","4.3.5.B","UNIVERSITY","radiobutton" +"4.3.5.B.6","4.3.5.B","PHD","radiobutton" +"4.3.5.C.1","4.3.5.C","MINIMUM_FEE","currency" +"4.3.5.C.2","4.3.5.C","MAXIMUM_FEE","currency" +"4.3.6.A.1","4.3.6.A","CONCEPT_EXPLANATION","checkbox" +"4.3.6.A.2","4.3.6.A","PROBLEM_SOLVING_PRACTICE","checkbox" +"4.3.6.A.3","4.3.6.A","HOMEWORK_GUIDANCE","checkbox" +"4.3.6.A.4","4.3.6.A","EXAM_PREPARATION","checkbox" +"4.3.6.A.5","4.3.6.A","PRACTICE_TEST_REVIEW","checkbox" +"4.3.6.B.1","4.3.6.B","ELEMENTARY_SCHOOL","radiobutton" +"4.3.6.B.2","4.3.6.B","MIDDLE_SCHOOL","radiobutton" +"4.3.6.B.3","4.3.6.B","HIGH_SCHOOL","radiobutton" +"4.3.6.B.4","4.3.6.B","COLLEGE","radiobutton" +"4.3.6.B.5","4.3.6.B","UNIVERSITY","radiobutton" +"4.3.6.B.6","4.3.6.B","PHD","radiobutton" +"4.3.6.C.1","4.3.6.C","MINIMUM_FEE","currency" +"4.3.6.C.2","4.3.6.C","MAXIMUM_FEE","currency" +"4.4.A.1","4.4.A","ELEMENTARY_SCHOOL","radiobutton" +"4.4.A.2","4.4.A","MIDDLE_SCHOOL","radiobutton" +"4.4.A.3","4.4.A","HIGH_SCHOOL","radiobutton" +"4.4.A.4","4.4.A","COLLEGE","radiobutton" +"4.4.A.5","4.4.A","UNIVERSITY","radiobutton" +"4.4.A.6","4.4.A","PHD","radiobutton" +"4.4.D.1","4.4.D","RESUME_CV","checkbox" +"4.4.D.2","4.4.D","ACADEMIC_TRANSCRIPTS","checkbox" +"4.4.D.3","4.4.D","CERTIFICATES","checkbox" +"4.4.D.4","4.4.D","OTHER","checkbox" +"4.5.A.1","4.5.A","ACADEMIC","radiobutton" +"4.5.A.2","4.5.A","EXAM_PREPARATION","radiobutton" +"4.5.A.3","4.5.A","SKILL_DEVELOPMENT","radiobutton" +"4.5.A.4","4.5.A","CAREER_DEVELOPMENT","radiobutton" +"4.5.C.1","4.5.C","GROUP_SIZE_MIN","integer" +"4.5.C.2","4.5.C","GROUP_SIZE_MAX","integer" +"4.5.D.1","4.5.D","DAILY","radiobutton" +"4.5.D.2","4.5.D","WEEKLY","radiobutton" +"4.6.A.1","4.6.A","RESUME_REVIEW","checkbox" +"4.6.A.2","4.6.A","MOCK_INTERVIEW","checkbox" +"4.6.A.3","4.6.A","JOB_SEARCH_HELP","checkbox" +"4.6.A.4","4.6.A","REFERRAL_GUIDANCE","checkbox" +"4.6.A.5","4.6.A","LINKEDIN_OPTIMIZATION","checkbox" +"4.6.A.6","4.6.A","CAREER_MENTORSHIP","checkbox" +"4.6.B.1","4.6.B","RESUME","checkbox" +"4.6.B.2","4.6.B","COVER_LETTER","checkbox" +"4.6.B.3","4.6.B","OTHER","checkbox" +"4.7.A.1","4.7.A","TEXTBOOKS","checkbox" +"4.7.A.2","4.7.A","NOTES_PDFS","checkbox" +"4.7.A.3","4.7.A","STATIONERY_EQUIPMENT","checkbox" +"4.7.A.4","4.7.A","OTHER","checkbox" +"5.1.10.A.1","5.1.10.A","WALK_IN_TODAY","radiobutton" +"5.1.10.A.2","5.1.10.A","SAME_NEXT_DAY","radiobutton" +"5.1.10.A.3","5.1.10.A","WITHIN_A_WEEK","radiobutton" +"5.1.10.A.4","5.1.10.A","NO_PREFERENCE","radiobutton" +"5.1.10.B.1","5.1.10.B","WHEELCHAIR_ACCESS","checkbox" +"5.1.10.B.2","5.1.10.B","STEP_FREE_ENTRY","checkbox" +"5.1.10.B.3","5.1.10.B","INTERPRETER_SUPPORT","checkbox" +"5.1.10.B.4","5.1.10.B","CAREGIVER_ALLOWED","checkbox" +"5.1.10.B.5","5.1.10.B","SERVICE_ANIMAL_FRIENDLY","checkbox" +"5.1.10.B.6","5.1.10.B","NONE","checkbox" +"5.1.10.B.7","5.1.10.B","OTHER","checkbox" +"5.1.11.A.1","5.1.11.A","WALK_IN_TODAY","radiobutton" +"5.1.11.A.2","5.1.11.A","SAME_NEXT_DAY","radiobutton" +"5.1.11.A.3","5.1.11.A","WITHIN_A_WEEK","radiobutton" +"5.1.11.A.4","5.1.11.A","NO_PREFERENCE","radiobutton" +"5.1.11.B.1","5.1.11.B","WHEELCHAIR_ACCESS","checkbox" +"5.1.11.B.2","5.1.11.B","STEP_FREE_ENTRY","checkbox" +"5.1.11.B.3","5.1.11.B","INTERPRETER_SUPPORT","checkbox" +"5.1.11.B.4","5.1.11.B","CAREGIVER_ALLOWED","checkbox" +"5.1.11.B.5","5.1.11.B","SERVICE_ANIMAL_FRIENDLY","checkbox" +"5.1.11.B.6","5.1.11.B","NONE","checkbox" +"5.1.11.B.7","5.1.11.B","OTHER","checkbox" +"5.1.1.A.1","5.1.1.A","WALK_IN_TODAY","radiobutton" +"5.1.1.A.2","5.1.1.A","SAME_NEXT_DAY","radiobutton" +"5.1.1.A.3","5.1.1.A","WITHIN_A_WEEK","radiobutton" +"5.1.1.A.4","5.1.1.A","NO_PREFERENCE","radiobutton" +"5.1.1.B.1","5.1.1.B","WHEELCHAIR_ACCESS","checkbox" +"5.1.1.B.2","5.1.1.B","STEP_FREE_ENTRY","checkbox" +"5.1.1.B.3","5.1.1.B","INTERPRETER_SUPPORT","checkbox" +"5.1.1.B.4","5.1.1.B","CAREGIVER_ALLOWED","checkbox" +"5.1.1.B.5","5.1.1.B","SERVICE_ANIMAL_FRIENDLY","checkbox" +"5.1.1.B.6","5.1.1.B","NONE","checkbox" +"5.1.1.B.7","5.1.1.B","OTHER","checkbox" +"5.1.2.A.1","5.1.2.A","WALK_IN_TODAY","radiobutton" +"5.1.2.A.2","5.1.2.A","SAME_NEXT_DAY","radiobutton" +"5.1.2.A.3","5.1.2.A","WITHIN_A_WEEK","radiobutton" +"5.1.2.A.4","5.1.2.A","NO_PREFERENCE","radiobutton" +"5.1.2.B.1","5.1.2.B","WHEELCHAIR_ACCESS","checkbox" +"5.1.2.B.2","5.1.2.B","STEP_FREE_ENTRY","checkbox" +"5.1.2.B.3","5.1.2.B","INTERPRETER_SUPPORT","checkbox" +"5.1.2.B.4","5.1.2.B","CAREGIVER_ALLOWED","checkbox" +"5.1.2.B.5","5.1.2.B","SERVICE_ANIMAL_FRIENDLY","checkbox" +"5.1.2.B.6","5.1.2.B","NONE","checkbox" +"5.1.2.B.7","5.1.2.B","OTHER","checkbox" +"5.1.3.A.1","5.1.3.A","WALK_IN_TODAY","radiobutton" +"5.1.3.A.2","5.1.3.A","SAME_NEXT_DAY","radiobutton" +"5.1.3.A.3","5.1.3.A","WITHIN_A_WEEK","radiobutton" +"5.1.3.A.4","5.1.3.A","NO_PREFERENCE","radiobutton" +"5.1.3.B.1","5.1.3.B","WHEELCHAIR_ACCESS","checkbox" +"5.1.3.B.2","5.1.3.B","STEP_FREE_ENTRY","checkbox" +"5.1.3.B.3","5.1.3.B","INTERPRETER_SUPPORT","checkbox" +"5.1.3.B.4","5.1.3.B","CAREGIVER_ALLOWED","checkbox" +"5.1.3.B.5","5.1.3.B","SERVICE_ANIMAL_FRIENDLY","checkbox" +"5.1.3.B.6","5.1.3.B","NONE","checkbox" +"5.1.3.B.7","5.1.3.B","OTHER","checkbox" +"5.1.4.A.1","5.1.4.A","WALK_IN_TODAY","radiobutton" +"5.1.4.A.2","5.1.4.A","SAME_NEXT_DAY","radiobutton" +"5.1.4.A.3","5.1.4.A","WITHIN_A_WEEK","radiobutton" +"5.1.4.A.4","5.1.4.A","NO_PREFERENCE","radiobutton" +"5.1.4.B.1","5.1.4.B","WHEELCHAIR_ACCESS","checkbox" +"5.1.4.B.2","5.1.4.B","STEP_FREE_ENTRY","checkbox" +"5.1.4.B.3","5.1.4.B","INTERPRETER_SUPPORT","checkbox" +"5.1.4.B.4","5.1.4.B","CAREGIVER_ALLOWED","checkbox" +"5.1.4.B.5","5.1.4.B","SERVICE_ANIMAL_FRIENDLY","checkbox" +"5.1.4.B.6","5.1.4.B","NONE","checkbox" +"5.1.4.B.7","5.1.4.B","OTHER","checkbox" +"5.1.5.A.1","5.1.5.A","WALK_IN_TODAY","radiobutton" +"5.1.5.A.2","5.1.5.A","SAME_NEXT_DAY","radiobutton" +"5.1.5.A.3","5.1.5.A","WITHIN_A_WEEK","radiobutton" +"5.1.5.A.4","5.1.5.A","NO_PREFERENCE","radiobutton" +"5.1.5.B.1","5.1.5.B","WHEELCHAIR_ACCESS","checkbox" +"5.1.5.B.2","5.1.5.B","STEP_FREE_ENTRY","checkbox" +"5.1.5.B.3","5.1.5.B","INTERPRETER_SUPPORT","checkbox" +"5.1.5.B.4","5.1.5.B","CAREGIVER_ALLOWED","checkbox" +"5.1.5.B.5","5.1.5.B","SERVICE_ANIMAL_FRIENDLY","checkbox" +"5.1.5.B.6","5.1.5.B","NONE","checkbox" +"5.1.5.B.7","5.1.5.B","OTHER","checkbox" +"5.1.6.A.1","5.1.6.A","WALK_IN_TODAY","radiobutton" +"5.1.6.A.2","5.1.6.A","SAME_NEXT_DAY","radiobutton" +"5.1.6.A.3","5.1.6.A","WITHIN_A_WEEK","radiobutton" +"5.1.6.A.4","5.1.6.A","NO_PREFERENCE","radiobutton" +"5.1.6.B.1","5.1.6.B","WHEELCHAIR_ACCESS","checkbox" +"5.1.6.B.2","5.1.6.B","STEP_FREE_ENTRY","checkbox" +"5.1.6.B.3","5.1.6.B","INTERPRETER_SUPPORT","checkbox" +"5.1.6.B.4","5.1.6.B","CAREGIVER_ALLOWED","checkbox" +"5.1.6.B.5","5.1.6.B","SERVICE_ANIMAL_FRIENDLY","checkbox" +"5.1.6.B.6","5.1.6.B","NONE","checkbox" +"5.1.6.B.7","5.1.6.B","OTHER","checkbox" +"5.1.7.A.1","5.1.7.A","WALK_IN_TODAY","radiobutton" +"5.1.7.A.2","5.1.7.A","SAME_NEXT_DAY","radiobutton" +"5.1.7.A.3","5.1.7.A","WITHIN_A_WEEK","radiobutton" +"5.1.7.A.4","5.1.7.A","NO_PREFERENCE","radiobutton" +"5.1.7.B.1","5.1.7.B","WHEELCHAIR_ACCESS","checkbox" +"5.1.7.B.2","5.1.7.B","STEP_FREE_ENTRY","checkbox" +"5.1.7.B.3","5.1.7.B","INTERPRETER_SUPPORT","checkbox" +"5.1.7.B.4","5.1.7.B","CAREGIVER_ALLOWED","checkbox" +"5.1.7.B.5","5.1.7.B","SERVICE_ANIMAL_FRIENDLY","checkbox" +"5.1.7.B.6","5.1.7.B","NONE","checkbox" +"5.1.7.B.7","5.1.7.B","OTHER","checkbox" +"5.1.8.A.1","5.1.8.A","WALK_IN_TODAY","radiobutton" +"5.1.8.A.2","5.1.8.A","SAME_NEXT_DAY","radiobutton" +"5.1.8.A.3","5.1.8.A","WITHIN_A_WEEK","radiobutton" +"5.1.8.A.4","5.1.8.A","NO_PREFERENCE","radiobutton" +"5.1.8.B.1","5.1.8.B","WHEELCHAIR_ACCESS","checkbox" +"5.1.8.B.2","5.1.8.B","STEP_FREE_ENTRY","checkbox" +"5.1.8.B.3","5.1.8.B","INTERPRETER_SUPPORT","checkbox" +"5.1.8.B.4","5.1.8.B","CAREGIVER_ALLOWED","checkbox" +"5.1.8.B.5","5.1.8.B","SERVICE_ANIMAL_FRIENDLY","checkbox" +"5.1.8.B.6","5.1.8.B","NONE","checkbox" +"5.1.8.B.7","5.1.8.B","OTHER","checkbox" +"5.1.9.A.1","5.1.9.A","WALK_IN_TODAY","radiobutton" +"5.1.9.A.2","5.1.9.A","SAME_NEXT_DAY","radiobutton" +"5.1.9.A.3","5.1.9.A","WITHIN_A_WEEK","radiobutton" +"5.1.9.A.4","5.1.9.A","NO_PREFERENCE","radiobutton" +"5.1.9.B.1","5.1.9.B","WHEELCHAIR_ACCESS","checkbox" +"5.1.9.B.2","5.1.9.B","STEP_FREE_ENTRY","checkbox" +"5.1.9.B.3","5.1.9.B","INTERPRETER_SUPPORT","checkbox" +"5.1.9.B.4","5.1.9.B","CAREGIVER_ALLOWED","checkbox" +"5.1.9.B.5","5.1.9.B","SERVICE_ANIMAL_FRIENDLY","checkbox" +"5.1.9.B.6","5.1.9.B","NONE","checkbox" +"5.1.9.B.7","5.1.9.B","OTHER","checkbox" +"5.2.A.1","5.2.A","DELIVERY_OTC_ITEMS","radiobutton" +"5.2.A.2","5.2.A","PICKUP_ASSISTANCE","radiobutton" +"5.2.A.3","5.2.A","PHARMACY_GUIDANCE","radiobutton" +"5.2.B.1","5.2.B","PRESCRIBED","radiobutton" +"5.2.B.2","5.2.B","NON_PRESCRIBED","radiobutton" +"5.2.C.1","5.2.C","PAIN_RELIEF","checkbox" +"5.2.C.10","5.2.C","OTHER","checkbox" +"5.2.C.2","5.2.C","COLD_FLU_CARE","checkbox" +"5.2.C.3","5.2.C","ALLERGY_RELIEF","checkbox" +"5.2.C.4","5.2.C","DIGESTIVE_HEALTH","checkbox" +"5.2.C.5","5.2.C","FIRST_AID_WOUND_CARE","checkbox" +"5.2.C.6","5.2.C","VITAMINS_SUPPLEMENTS","checkbox" +"5.2.C.7","5.2.C","SKIN_CARE_TOPICALS","checkbox" +"5.2.C.8","5.2.C","WOMEN_MEN_HEALTH","checkbox" +"5.2.C.9","5.2.C","CHILDREN_HEALTH","checkbox" +"5.2.D.1","5.2.D","SAME_NEXT_DAY","radiobutton" +"5.2.D.2","5.2.D","3 _4_DAYS","radiobutton" +"5.2.D.3","5.2.D","WITHIN_A_WEEK","radiobutton" +"5.2.D.4","5.2.D","NO_PREFERENCE","radiobutton" +"5.3.A.1","5.3.A","COUNSELING_REFERRAL","radiobutton" +"5.3.A.2","5.3.A","PEER_SUPPORT_GROUP","radiobutton" +"5.3.A.3","5.3.A","WELLNESS_CLASS_WORKSHOP","radiobutton" +"5.3.A.4","5.3.A","SELF_GUIDED_RESOURCES","radiobutton" +"5.3.B.1","5.3.B","LICENSED_PROFESSIONAL","radiobutton" +"5.3.B.2","5.3.B","PEER_SUPPORT_VOLUNTEER","radiobutton" +"5.3.B.3","5.3.B","COMMUNITY_ORGANIZATION","radiobutton" +"5.3.C.1","5.3.C","MORNING_9AM_12PM","radiobutton" +"5.3.C.2","5.3.C","AFTERNOON_12PM_5PM","radiobutton" +"5.3.C.3","5.3.C","EVENING_5PM_9PM","radiobutton" +"5.3.C.4","5.3.C","WEEKENDS","radiobutton" +"5.3.C.5","5.3.C","FLEXIBLE","radiobutton" +"5.4.A.1","5.4.A","MEDICATION_SUPPLEMENT_REMINDER","radiobutton" +"5.4.A.2","5.4.A","DOCTOR_APPOINTMENT","radiobutton" +"5.4.A.3","5.4.A","TEST_LAB_SCHEDULE","radiobutton" +"5.4.A.4","5.4.A","EXERCISE_OR_PHYSICAL_TRAINING_SESSION","radiobutton" +"5.4.A.5","5.4.A","CUSTOM_WELLNESS_TASK","radiobutton" +"5.4.C.1","5.4.C","ONCE_DAILY","radiobutton" +"5.4.C.2","5.4.C","TWICE_DAILY","radiobutton" +"5.4.C.3","5.4.C","CUSTOM_TIMES_PER_DAY","radiobutton" +"5.4.C.4","5.4.C","SPECIFIC_DAYS_MON_FRI","radiobutton" +"5.4.C.5","5.4.C","DAILY","radiobutton" +"5.4.D.1","5.4.D","7 _DAYS","radiobutton" +"5.4.D.2","5.4.D","30_DAYS","radiobutton" +"5.4.D.3","5.4.D","CUSTOM_DURATION","radiobutton" +"5.4.E.1","5.4.E","SMS","radiobutton" +"5.4.E.2","5.4.E","EMAIL","radiobutton" +"5.4.E.3","5.4.E","MOBILE_APP","radiobutton" +"5.4.E.4","5.4.E","CAREGIVER_NOTIFICATION","radiobutton" +"5.5.A.1","5.5.A","NUTRITION_AND_HEALTHY_EATING","checkbox" +"5.5.A.2","5.5.A","PHYSICAL_ACTIVITY_AND_MOVEMENT","checkbox" +"5.5.A.3","5.5.A","HYGIENE_AND_PERSONAL_CARE","checkbox" +"5.5.A.4","5.5.A","PREVENTIVE_HEALTH_TIPS","checkbox" +"5.5.A.5","5.5.A","SLEEP_AND_WELlBEING","checkbox" +"5.5.A.6","5.5.A","HEALTHY_AGING","checkbox" +"5.5.A.7","5.5.A","STRESS_MANAGEMENT_AND_MINDFULNESS","checkbox" +"5.5.A.8","5.5.A","GENERAL_WELLNESS_EDUCATION","checkbox" +"5.5.A.9","5.5.A","OTHER_NON_CLINICAL","checkbox" +"5.5.B.1","5.5.B","ARTICLES","checkbox" +"5.5.B.2","5.5.B","VIDEOS","checkbox" +"5.5.B.3","5.5.B","INFOGRAPHICS","checkbox" +"5.5.B.4","5.5.B","PRINTABLE_GUIDES_PDFS","checkbox" +"5.5.B.5","5.5.B","SHORT_TIPS_SUMMARIES","checkbox" +"5.5.B.6","5.5.B","SMS_FRIENDLY_LINKS","checkbox" +"5.5.B.7","5.5.B","AUDIO_CLIPS_PODCASTS","checkbox" +"5.5.B.8","5.5.B","MIXED_FORMAT","checkbox" +"6.1.B.1","6.1.B","PRIMARY_SLOT","date&time" +"6.1.B.2","6.1.B","ALTERNATE_SLOT","date&time" +"6.1.C.1","6.1.C","NUMBER_OF_BOXES","checkbox" +"6.1.C.2","6.1.C","FURNITURE_CHECKLIST","checkbox" +"6.1.C.3","6.1.C","FRAGILE_ITEMS","checkbox" +"6.1.C.4","6.1.C","SPECIAL_HANDLING_NEEDS","checkbox" +"6.1.D.1","6.1.D","PACKING","checkbox" +"6.1.D.2","6.1.D","TRANSPORT","checkbox" +"6.1.D.3","6.1.D","UNPACKING","checkbox" +"6.1.D.4","6.1.D","LOADING_UNLOADING","checkbox" +"6.2.A.1","6.2.A","APP_NAME","textbox" +"6.2.A.2","6.2.A","TYPE_OF_DEVICE","textbox" +"6.2.A.3","6.2.A","OPERATING_SYSTEM","textbox" +"6.3.A.1","6.3.A","NUMBER_OF_MEDICATIONS","integer" +"6.3.A.2","6.3.A","TIMING_PER_DAY","integer" +"6.3.C.1","6.3.C","PHONE_CALL","radiobutton" +"6.3.C.2","6.3.C","APP_SETUP_HELP","radiobutton" +"6.3.C.3","6.3.C","PHYSICAL_VISIT","radiobutton" +"6.4.A.1","6.4.A","BLOOD_PRESSURE_MONITOR","checkbox" +"6.4.A.2","6.4.A","GLUCOSE_METER","checkbox" +"6.4.A.3","6.4.A","PULSE_OXIMETER","checkbox" +"6.4.A.4","6.4.A","SMARTWATCH_WEARABLE","checkbox" +"6.4.B.1","6.4.B","VIDEO_CALL","radiobutton" +"6.4.B.2","6.4.B","HOME_VISIT","radiobutton" +"6.4.B.3","6.4.B","REMOTE_STEP_BY_STEP_GUIDE","radiobutton" +"6.5.A.1","6.5.A","GROCERY_SHOPPING","checkbox" +"6.5.A.2","6.5.A","PHARMACY_PICKUP","checkbox" +"6.5.A.3","6.5.A","BILL_PAYMENT","checkbox" +"6.5.A.4","6.5.A","GENERAL_STORE","checkbox" +"6.5.B.1","6.5.B","ONE_TIME","radiobutton" +"6.5.B.2","6.5.B","WEEKLY_MONTHLY","radiobutton" +"6.5.B.3","6.5.B","EMERGENCY","radiobutton" +"6.6.D.1","6.6.D","ROUND_TRIP","radiobutton" +"6.6.D.2","6.6.D","ONE_WAY","radiobutton" +"6.6.D.3","6.6.D","WAIT_AND_RETURN","radiobutton" +"6.6.E.1","6.6.E","WHEELCHAIR_ACCESSIBLE_VEHICLE","checkbox" +"6.6.E.2","6.6.E","NEEDS_HELP_ENTERING_EXITING_VEHICLE","checkbox" +"6.6.E.3","6.6.E","USES_WALKER_OR_CANE","checkbox" +"6.6.E.4","6.6.E","NO_SPECIAL_NEEDS","checkbox" +"6.6.F.1","6.6.F","VOLUNTEER_CAR","radiobutton" +"6.6.F.2","6.6.F","ESCORT_IN_PUBLIC_TRANSIT","radiobutton" +"6.6.F.3","6.6.F","RIDE_BOOKING_ASSISTANCE","radiobutton" +"6.7.A.1","6.7.A","DOCTOR_OR_DENTIST","radiobutton" +"6.7.A.2","6.7.A","SOCIAL_SERVICE","radiobutton" +"6.7.A.3","6.7.A","BANK_OR_GOVERNMENT","radiobutton" +"6.7.A.4","6.7.A","UTILITY_SERVICES","radiobutton" +"6.7.B.1","6.7.B","BOOKING_ONLINE","radiobutton" +"6.7.B.2","6.7.B","CALLING","radiobutton" +"6.7.B.3","6.7.B","GOING_IN_PERSON_WITH_HELP","radiobutton" +"6.8.A.1","6.8.A","PHONE_CALL_OR_CHAT","checkbox" +"6.8.A.2","6.8.A","WALK_IN_THE_PARK","checkbox" +"6.8.A.3","6.8.A","BOARD_GAMES_OR_CARD_GAMES","checkbox" +"6.8.A.4","6.8.A","READING_TOGETHER","checkbox" +"6.8.B.1","6.8.B","ONE_TIME","radiobutton" +"6.8.B.2","6.8.B","WEEKLY_MONTHLY","radiobutton" +"6.8.B.3","6.8.B","SPECIFIC_DATES","radiobutton" +"6.9.A.1","6.9.A","MEAL_PREP_ASSISTANCE","checkbox" +"6.9.A.2","6.9.A","COOKING_TOGETHER","checkbox" +"6.9.A.3","6.9.A","SUPERVISION_WHILE_COOKING","checkbox" +"6.9.B.1","6.9.B","VOLUNTEERS_HOME","radiobutton" +"6.9.B.2","6.9.B","ELDERS_HOME","radiobutton" +"6.9.B.3","6.9.B","COMMUNITY_KITCHEN","radiobutton" +"6.9.C.1","6.9.C","VEGETARIAN","checkbox" +"6.9.C.2","6.9.C","DIABETIC_FRIENDLY","checkbox" +"6.9.C.3","6.9.C","LOW_SODIUM","checkbox" +"6.9.C.4","6.9.C","NO_PREFERENCE","checkbox" +"6.9.D.1","6.9.D","ONE_TIME","radiobutton" +"6.9.D.2","6.9.D","WEEKLY_MONTHLY","radiobutton" +"6.9.D.3","6.9.D","SPECIFIC_DATES","radiobutton" diff --git a/database/lookup_tables/notification_channels.csv b/database/lookup_tables/notification_channels.csv new file mode 100644 index 0000000..a6e7273 --- /dev/null +++ b/database/lookup_tables/notification_channels.csv @@ -0,0 +1,5 @@ +"channel_id","channel_name","description" +1,"IN_APP","Notifications sent from application" +2,"EMAIL","Notifications sent to the user registered email address" +3,"PUSH","Real-time push notifications sent to the user mobile device" +4,"SMS","Text messages sent to the user verified phone number" diff --git a/database/lookup_tables/notification_types.csv b/database/lookup_tables/notification_types.csv new file mode 100644 index 0000000..231438c --- /dev/null +++ b/database/lookup_tables/notification_types.csv @@ -0,0 +1,6 @@ +"type_id","type_name","description" +1,"ALERT","Critical alerts" +10,"EVENT_REMINDER","Reminders for upcoming registered volunteer events" +11,"MESSAGE_RECEIVED","Notification for a new direct message from another user" +12,"APPLICATION_UPDATE","Updates regarding the status of a volunteer application" +13,"MILESTONE_REACHED","Celebratory notification for reaching a volunteer hour goal" diff --git a/database/lookup_tables/req_add_info_metadata.csv b/database/lookup_tables/req_add_info_metadata.csv new file mode 100644 index 0000000..c17c8b7 --- /dev/null +++ b/database/lookup_tables/req_add_info_metadata.csv @@ -0,0 +1,229 @@ +"field_id","field_name_key","field_type","status","cat_id" +"1.1.A","PREFERRED_MEAL_TYPE","list","active","1.1" +"1.1.B","DIETARY_RESTRICTIONS","list","active","1.1" +"1.1.C","HOUSEHOLD_SIZE","integer","active","1.1" +"1.2.A","GROCERY_LIST","textbox","active","1.2" +"1.2.B","DELIVERY_TIME","list","active","1.2" +"1.2.C","PAYMENT_METHOD","list","active","1.2" +"1.2.D","URGENCY_TIMELINE","list","active","1.2" +"1.3.1.A","RECIPE_PREFERENCE","list","active","1.3.1" +"1.3.1.B","KITCHEN_EQUIPMENT","list","active","1.3.1" +"1.3.1.C","URGENCY_TIMELINE","list","active","1.3.1" +"1.3.1.D","PREFERRED_LANGUGAE","textbox","active","1.3.1" +"1.3.2.A","RECIPE_PREFERENCE","list","active","1.3.2" +"1.3.2.B","KITCHEN_EQUIPMENT","list","active","1.3.2" +"1.3.2.C","URGENCY_TIMELINE","list","active","1.3.2" +"1.3.2.D","PREFERRED_LANGUGAE","textbox","active","1.3.2" +"1.3.3.A","RECIPE_PREFERENCE","list","active","1.3.3" +"1.3.3.B","KITCHEN_EQUIPMENT","list","active","1.3.3" +"1.3.3.C","URGENCY_TIMELINE","list","active","1.3.3" +"1.3.3.D","PREFERRED_LANGUGAE","textbox","active","1.3.3" +"1.3.4.A","RECIPE_PREFERENCE","list","active","1.3.4" +"1.3.4.B","KITCHEN_EQUIPMENT","list","active","1.3.4" +"1.3.4.C","URGENCY_TIMELINE","list","active","1.3.4" +"1.3.4.D","PREFERRED_LANGUGAE","textbox","active","1.3.4" +"1.3.5.A","RECIPE_PREFERENCE","list","active","1.3.5" +"1.3.5.B","KITCHEN_EQUIPMENT","list","active","1.3.5" +"1.3.5.C","URGENCY_TIMELINE","list","active","1.3.5" +"1.3.5.D","PREFERRED_LANGUGAE","textbox","active","1.3.5" +"2.1.A","GENDER_CATEGORY","list","active","2.1" +"2.1.B","TYPE_OF_CLOTHING","list","active","2.1" +"2.1.C","SIZE","list","active","2.1" +"2.1.D","CONDITION","list","active","2.1" +"2.1.E","TOTAL_QUANTITY","integer","active","2.1" +"2.2.A","ITEM_NAME","textbox","active","2.2" +"2.2.B","GENDER_CATEGORY","list","active","2.2" +"2.2.C","TYPE_OF_CLOTHING","list","active","2.2" +"2.2.D","SIZE","list","active","2.2" +"2.2.E","CONDITION","list","active","2.2" +"2.2.F","TOTAL_QUANTITY","integer","active","2.2" +"2.2.H","BORROW_TYPE","list","active","2.2" +"2.2.I","PICKUP_DATE_AND_TIME","date&time","active","2.2" +"2.3.A","GENDER_CATEGORY","list","active","2.3" +"2.3.B","TYPE_OF_CLOTHING","list","active","2.3" +"2.3.C","SIZE","list","active","2.3" +"2.3.D","NUMBER_OF_INDIVIDUALS","textbox","active","2.3" +"2.3.E","EMERGENCY_TYPE","list","active","2.3" +"2.3.F","URGENCY_LEVEL","list","active","2.3" +"2.4.A","GENDER_CATEGORY","list","active","2.4" +"2.4.B","TYPE_OF_CLOTHING","list","active","2.4" +"2.4.C","GARMENT_TYPE","list","active","2.4" +"2.4.D","PREFERRED_METHOD","list","active","2.4" +"3.10.A","ITEM_CATEGORY","list","active","3.10" +"3.10.B","AREA_OF_SUPPORT","list","active","3.10" +"3.10.C","ITEM_CONDITION","list","active","3.10" +"3.10.D","SALE_TIMELINE","list","active","3.10" +"3.1.A","AREA_OF_HELP","list","active","3.1" +"3.1.B","LANGUAGE_DOC_TO_REVIEW","list","active","3.1" +"3.1.C","URGENCY_TIMELINE","list","active","3.1" +"3.2.A","AREA_OF_DISPUTE","list","active","3.2" +"3.2.B","STATUS_OF_DISPUTE","list","active","3.2" +"3.2.C","DOCUMENTS_AVAILABLE","list","active","3.2" +"3.2.D","LANGUAGE_OF_SUPPORT","textbox","active","3.2" +"3.2.E","URGENCY_TIMELINE","list","active","3.2" +"3.3.10.A","URGENCY_TIMELINE","list","active","3.3.10" +"3.3.10.B","PREFERRED_TIMELINE","list","active","3.3.10" +"3.3.11.A","URGENCY_TIMELINE","list","active","3.3.11" +"3.3.11.B","PREFERRED_TIMELINE","list","active","3.3.11" +"3.3.12.A","URGENCY_TIMELINE","list","active","3.3.12" +"3.3.12.B","PREFERRED_TIMELINE","list","active","3.3.12" +"3.3.13.A","URGENCY_TIMELINE","list","active","3.3.13" +"3.3.13.B","PREFERRED_TIMELINE","list","active","3.3.13" +"3.3.1.A","URGENCY_TIMELINE","list","active","3.3.1" +"3.3.1.B","PREFERRED_TIMELINE","list","active","3.3.1" +"3.3.2.A","URGENCY_TIMELINE","list","active","3.3.2" +"3.3.2.B","PREFERRED_TIMELINE","list","active","3.3.2" +"3.3.3.A","URGENCY_TIMELINE","list","active","3.3.3" +"3.3.3.B","PREFERRED_TIMELINE","list","active","3.3.3" +"3.3.4.A","URGENCY_TIMELINE","list","active","3.3.4" +"3.3.4.B","PREFERRED_TIMELINE","list","active","3.3.4" +"3.3.5.A","URGENCY_TIMELINE","list","active","3.3.5" +"3.3.5.B","PREFERRED_TIMELINE","list","active","3.3.5" +"3.3.6.A","URGENCY_TIMELINE","list","active","3.3.6" +"3.3.6.B","PREFERRED_TIMELINE","list","active","3.3.6" +"3.3.7.A","URGENCY_TIMELINE","list","active","3.3.7" +"3.3.7.B","PREFERRED_TIMELINE","list","active","3.3.7" +"3.3.8.A","URGENCY_TIMELINE","list","active","3.3.8" +"3.3.8.B","PREFERRED_TIMELINE","list","active","3.3.8" +"3.3.9.A","URGENCY_TIMELINE","list","active","3.3.9" +"3.3.9.B","PREFERRED_TIMELINE","list","active","3.3.9" +"3.4.A","AREA_OF_SUPPORT","list","active","3.4" +"3.4.B","TIMELINE_FOR_SUPPORT","list","active","3.4" +"3.5.A","PROPERTY_TYPE","list","active","3.5" +"3.5.B","AGREEMENT_TYPE","list","active","3.5" +"3.5.C","MONTHLY_RENT_BUDGET_RANGE","list","active","3.5" +"3.5.D","MOVE_IN_TIMELINE","list","active","3.5" +"3.5.E","ROOMMATE_PREFERENCE","list","active","3.5" +"3.5.F","NUMBER_OF_PEOPLE_SHARING","integer","active","3.5" +"3.5.G","NUMBER_OF_BATHROOMS","integer","active","3.5" +"3.5.H","ADDITIONAL_ROOM_CRITERIA","list","active","3.5" +"3.6.A","RENTAL_LISTING_TYPE","list","active","3.6" +"3.6.B","PROPERTY_TYPE","list","active","3.6" +"3.6.C","LEASE_TYPE","list","active","3.6" +"3.6.D","MONTHLY_RENT ","currency","active","3.6" +"3.6.E","UTILITIES_INCLUDED","list","active","3.6" +"3.6.F","AVAILABLE_MOVE_IN","list","active","3.6" +"3.6.G","NUMBER_OF_PEOPLE_SHARING","integer","active","3.6" +"3.6.H","ADDITIONAL_ROOM_CRITERIA","list","active","3.6" +"3.6.I","PREFERRED_GENDER","list","active","3.6" +"3.6.J","PREFERRED_AGE","list","active","3.6" +"3.6.K","PROPERTY_RULES","list","active","3.6" +"3.7.A","TYPE_OF_ASSISTANCE_NEEDED","list","active","3.7" +"3.7.B","ESTIMATED_MOVING_DATE","date&time","active","3.7" +"3.7.C","ESTIMATED_DURATION_OF_HELP_NEEDED","list","active","3.7" +"3.7.D","NEED_FOR_VEHICLE","checkbox","active","3.7" +"3.7.E","VOLUME_OF_ITEMS_TO_MOVE","list","active","3.7" +"3.8.A","SERVICE_TYPE","list","active","3.8" +"3.8.B","ESTIMATED_MOVING_DATE","date&time","active","3.8" +"3.8.C","VOLUME_OF_ITEMS_TO_MOVE","list","active","3.8" +"3.8.D","BUDGET_FOR_MOVERS","list","active","3.8" +"3.8.E","NEED_FOR_INSURANCE_LIABILITY","checkbox","active","3.8" +"3.9.A","ITEM_CATEGORY","list","active","3.9" +"3.9.B","AREA_OF_SUPPORT","list","active","3.9" +"3.9.C","BUDGET_RANGE","list","active","3.9" +"3.9.D","NEED_FOR_LOGISTICS_TRANSPORT","checkbox","active","3.9" +"3.9.E","SUPPORT_TIMELINE","list","active","3.9" +"3.9.F","ITEM_CONDITION","list","active","3.9" +"4.1.A","AREA_OF_HELP","list","active","4.1" +"4.2.A","DOCUMENT_TYPE","list","active","4.2" +"4.2.B","FEEDBACK_TYPE","list","active","4.2" +"4.3.1.A","TUTORING_FOCUS","list","active","4.3.1" +"4.3.1.B","GRADE_LEVEL","list","active","4.3.1" +"4.3.1.C","PREFERRED_TUTORING_FEE","list","active","4.3.1" +"4.3.2.A","TUTORING_FOCUS","list","active","4.3.2" +"4.3.2.B","GRADE_LEVEL","list","active","4.3.2" +"4.3.2.C","PREFERRED_TUTORING_FEE","list","active","4.3.2" +"4.3.3.A","TUTORING_FOCUS","list","active","4.3.3" +"4.3.3.B","GRADE_LEVEL","list","active","4.3.3" +"4.3.3.C","PREFERRED_TUTORING_FEE","list","active","4.3.3" +"4.3.4.A","TUTORING_FOCUS","list","active","4.3.4" +"4.3.4.B","GRADE_LEVEL","list","active","4.3.4" +"4.3.4.C","PREFERRED_TUTORING_FEE","list","active","4.3.4" +"4.3.5.A","TUTORING_FOCUS","list","active","4.3.5" +"4.3.5.B","GRADE_LEVEL","list","active","4.3.5" +"4.3.5.C","PREFERRED_TUTORING_FEE","list","active","4.3.5" +"4.3.6.A","TUTORING_FOCUS","list","active","4.3.6" +"4.3.6.B","GRADE_LEVEL","list","active","4.3.6" +"4.3.6.C","PREFERRED_TUTORING_FEE","list","active","4.3.6" +"4.4.A","EDUCATION_LEVEL","list","active","4.4" +"4.4.B","FIELD_OF_STUDY","textbox","active","4.4" +"4.4.C","FINANCIAL_NEED","checkbox","active","4.4" +"4.4.D","DOCUMENT_TYPE","list","active","4.4" +"4.4.E","IS_SPECIAL_CATEGORY","checkbox","active","4.4" +"4.5.A","GROUP_TYPE","list","active","4.5" +"4.5.B","SUBJECT_OR_TOPIC","textbox","active","4.5" +"4.5.C","GROUP_SIZE","list","active","4.5" +"4.5.D","FREQUENCY","list","active","4.5" +"4.6.A","TYPE_OF_GUIDANCE","list","active","4.6" +"4.6.B","SUPPORTING_FILES_TYPE","list","active","4.6" +"4.7.A","RESOURCE_TYPE","list","active","4.7" +"5.1.10.A","URGENCY_LEVEL","list","active","5.1.10" +"5.1.10.B","ACCESSIBILITY_NEEDS","list","active","5.1.10" +"5.1.11.A","URGENCY_LEVEL","list","active","5.1.11" +"5.1.11.B","ACCESSIBILITY_NEEDS","list","active","5.1.11" +"5.1.1.A","URGENCY_LEVEL","list","active","5.1.1" +"5.1.1.B","ACCESSIBILITY_NEEDS","list","active","5.1.1" +"5.1.2.A","URGENCY_LEVEL","list","active","5.1.2" +"5.1.2.B","ACCESSIBILITY_NEEDS","list","active","5.1.2" +"5.1.3.A","URGENCY_LEVEL","list","active","5.1.3" +"5.1.3.B","ACCESSIBILITY_NEEDS","list","active","5.1.3" +"5.1.4.A","URGENCY_LEVEL","list","active","5.1.4" +"5.1.4.B","ACCESSIBILITY_NEEDS","list","active","5.1.4" +"5.1.5.A","URGENCY_LEVEL","list","active","5.1.5" +"5.1.5.B","ACCESSIBILITY_NEEDS","list","active","5.1.5" +"5.1.6.A","URGENCY_LEVEL","list","active","5.1.6" +"5.1.6.B","ACCESSIBILITY_NEEDS","list","active","5.1.6" +"5.1.7.A","URGENCY_LEVEL","list","active","5.1.7" +"5.1.7.B","ACCESSIBILITY_NEEDS","list","active","5.1.7" +"5.1.8.A","URGENCY_LEVEL","list","active","5.1.8" +"5.1.8.B","ACCESSIBILITY_NEEDS","list","active","5.1.8" +"5.1.9.A","URGENCY_LEVEL","list","active","5.1.9" +"5.1.9.B","ACCESSIBILITY_NEEDS","list","active","5.1.9" +"5.2.A","DELIVERY_TYPE","list","active","5.2" +"5.2.B","PRESCRIPTION_TYPE","list","active","5.2" +"5.2.C","OTC_CATEGORY","list","active","5.2" +"5.2.D","DELIVERY_TIME","list","active","5.2" +"5.2.E","IS_OTC_AND_NON_PRESCRIPTION","checkbox","active","5.2" +"5.3.A","HELP_TYPE","list","active","5.3" +"5.3.B","PROVIDER_TYPE","list","active","5.3" +"5.3.C","TIMEFRAME_TIMEZONE","list","active","5.3" +"5.4.A","REMINDER_TYPE","list","active","5.4" +"5.4.B","REMINDER_TIMES","time","active","5.4" +"5.4.C","REPETITION_SCHEDULE","list","active","5.4" +"5.4.D","DURATION","list","active","5.4" +"5.4.E","REMINDER_METHOD","list","active","5.4" +"5.5.A","EDUCATION_TOPIC","list","active","5.5" +"5.5.B","PREFERRED_FORMAT","list","active","5.5" +"6.1.A","DESTINATION_ADDRESS","textbox","active","6.1" +"6.1.B","PREFERRED_MOVE_OUT_DATE","list","active","6.1" +"6.1.C","ITEMS_TO_BE_MOVED","list","active","6.1" +"6.1.D","TYPE_OF_ASSISTANCE_NEEDED","list","active","6.1" +"6.2.A","ADDITIONAL_INFORMATION","list","active","6.2" +"6.3.A","SCHEDULE_INFORMATION","list","active","6.3" +"6.3.B","DOCTOR_PRESCRIPTION","checkbox","active","6.3" +"6.3.C","REMINDER_TYPE","list","active","6.3" +"6.3.D","PREFERRED_TIME_SLOTS","date&time","active","6.3" +"6.4.A","DEVICE_TYPE","list","active","6.4" +"6.4.B","SETUP_MODE","list","active","6.4" +"6.4.C","PREFERRED_TIME_SLOTS","date&time","active","6.4" +"6.4.D","DEVICE_BRAND","textbox","active","6.4" +"6.5.A","ERRAND_TYPE","list","active","6.5" +"6.5.B","FREQUENCY","list","active","6.5" +"6.5.C","PREFERRED_TIME_SLOTS","time","active","6.5" +"6.6.A","DROP_OFF_LOCATION","textbox","active","6.6" +"6.6.B","APPOINTMENT_EVENT_TYPE","textbox","active","6.6" +"6.6.C","APPOINTMENT_EVENT_TIME","date&time","active","6.6" +"6.6.D","TRIP_TYPE","list","active","6.6" +"6.6.E","ACCESSIBILITY_NEEDS","list","active","6.6" +"6.6.F","TRANSPORT_MODE","list","active","6.6" +"6.7.A","APPOINTMENT_TYPE","list","active","6.7" +"6.7.B","APPOINTMENT_MODE","list","active","6.7" +"6.7.C","PREFERRED_TIME_SLOTS","date&time","active","6.7" +"6.8.A","ACTIVITY","list","active","6.8" +"6.8.B","FREQUENCY","list","active","6.8" +"6.8.C","PREFERRED_TIME_SLOTS","date&time","active","6.8" +"6.9.A","TYPE_OF_HELP_NEEDED","list","active","6.9" +"6.9.B","PREFERRED_LOCATION","textbox","active","6.9" +"6.9.C","DIETARY_PREFERENCES","list","active","6.9" +"6.9.D","FREQUENCY","list","active","6.9" +"6.9.E","PREFERRED_TIME","time","active","6.9" diff --git a/database/lookup_tables/request_for.csv b/database/lookup_tables/request_for.csv new file mode 100644 index 0000000..4afcd90 --- /dev/null +++ b/database/lookup_tables/request_for.csv @@ -0,0 +1,3 @@ +"req_for_id","req_for","req_for_desc","last_updated_date" +0,"SELF","For personal benefits of the individual",NULL +1,"OTHER","User is filing a request for others. This other person does NOT have an account within our system",NULL diff --git a/database/lookup_tables/request_isleadvol.csv b/database/lookup_tables/request_isleadvol.csv new file mode 100644 index 0000000..c75c95d --- /dev/null +++ b/database/lookup_tables/request_isleadvol.csv @@ -0,0 +1,3 @@ +"req_islead_id","req_islead","req_islead_desc","last_updated_date" +0,"NO","Contributes to the request under the direction of the lead",NULL +1,"YES","The main point of contact with full authority over the request process",NULL diff --git a/database/lookup_tables/request_priority.csv b/database/lookup_tables/request_priority.csv new file mode 100644 index 0000000..a6efc35 --- /dev/null +++ b/database/lookup_tables/request_priority.csv @@ -0,0 +1,5 @@ +"req_priority_id","req_priority","req_priority_desc","last_updated_date" +0,"LOW","not urgent/time sensitive and can wait for help",NULL +1,"MEDIUM","standard request; needs attention soon, within few days",NULL +2,"HIGH","urgent request and needs quick action",NULL +3,"CRITICAL","immediate help for a serious, non-life-threatening issue",NULL diff --git a/database/lookup_tables/request_status.csv b/database/lookup_tables/request_status.csv new file mode 100644 index 0000000..5d0ebc0 --- /dev/null +++ b/database/lookup_tables/request_status.csv @@ -0,0 +1,9 @@ +"req_status_id","req_status","req_status_desc","last_updated_date" +0,"CREATED","The request has been successfully submitted and is awaiting initial review",NULL +1,"MATCHING_VOLUNTEER","The request is currently being matched with a suitable volunteer",NULL +2,"IN_PROGRESS","A volunteer has accepted the request and is actively working on fulfilling it",NULL +3,"RESOLVED","The request has been successfully completed and no further action is required",NULL +4,"CANCELLED","The requester or administrator has officially canceled the request",NULL +5,"DELETED","The request has been permanently removed from the system",NULL +6,"RATED_BY_REQUESTER","The requester has provided a rating",NULL +7,"RATED_BY_VOLUNTEER","The volunteer has provided a rating",NULL diff --git a/database/lookup_tables/request_type.csv b/database/lookup_tables/request_type.csv new file mode 100644 index 0000000..05b3534 --- /dev/null +++ b/database/lookup_tables/request_type.csv @@ -0,0 +1,3 @@ +"req_type_id","req_type","req_type_desc","last_updated_date" +0,"IN_PERSON","Help requires a volunteer to be physically present at a specific location to assist",NULL +1,"REMOTE","Help does not require the person to be there physically",NULL diff --git a/database/lookup_tables/state.csv b/database/lookup_tables/state.csv new file mode 100644 index 0000000..0e1173d --- /dev/null +++ b/database/lookup_tables/state.csv @@ -0,0 +1,5046 @@ +"state_id","country_id","state_name","state_code","last_update_date" +"100.1",100,"CAPITAL_REGION",NULL,NULL +"100.2",100,"EASTERN_REGION",NULL,NULL +"100.3",100,"NORTHEASTERN_REGION",NULL,NULL +"100.4",100,"NORTHWESTERN_REGION",NULL,NULL +"100.5",100,"SOUTHERN_PENINSULA_REGION",NULL,NULL +"100.6",100,"SOUTHERN_REGION",NULL,NULL +"100.7",100,"WESTERN_REGION",NULL,NULL +"100.8",100,"WESTFJORDS",NULL,NULL +"10.1",10,"BARBUDA",NULL,NULL +"101.1",101,"ANDAMAN_AND_NICOBAR_ISLANDS","AN",NULL +"101.10",101,"GOA","GA",NULL +"101.11",101,"GUJARAT","GJ",NULL +"101.12",101,"HARYANA","HR",NULL +"101.13",101,"HIMACHAL_PRADESH","HP",NULL +"101.14",101,"JAMMU_AND_KASHMIR","JK",NULL +"101.15",101,"JHARKHAND","JH",NULL +"101.16",101,"KARNATAKA","KA",NULL +"101.17",101,"KERALA","KL",NULL +"101.18",101,"LADAKH","LA",NULL +"101.19",101,"LAKSHADWEEP","LD",NULL +"101.2",101,"ANDHRA_PRADESH","AP",NULL +"101.20",101,"MADHYA_PRADESH","MP",NULL +"101.21",101,"MAHARASHTRA","MH",NULL +"101.22",101,"MANIPUR","MN",NULL +"101.23",101,"MEGHALAYA","ML",NULL +"101.24",101,"MIZORAM","MZ",NULL +"101.25",101,"NAGALAND","NL",NULL +"101.26",101,"ODISHA","OR",NULL +"101.27",101,"PUDUCHERRY","PY",NULL +"101.28",101,"PUNJAB","PB",NULL +"101.29",101,"RAJASTHAN","RJ",NULL +"101.3",101,"ARUNACHAL_PRADESH","AR",NULL +"101.30",101,"SIKKIM","SK",NULL +"101.31",101,"TAMIL_NADU","TN",NULL +"101.32",101,"TELANGANA","TG",NULL +"101.33",101,"TRIPURA","TR",NULL +"101.34",101,"UTTAR_PRADESH","UP",NULL +"101.35",101,"UTTARAKHAND","UT",NULL +"101.36",101,"WEST_BENGAL","WB",NULL +"101.4",101,"ASSAM","AS",NULL +"101.5",101,"BIHAR","BR",NULL +"101.6",101,"CHANDIGARH","CH",NULL +"101.7",101,"CHHATTISGARH","CT",NULL +"101.8",101,"DADRA_AND_NAGAR_HAVELI_AND_DAMAN_AND_DIU","DH",NULL +"101.9",101,"DELHI","DL",NULL +"10.2",10,"REDONDA",NULL,NULL +"102.1",102,"ACEH","AC",NULL +"102.10",102,"JAWA_TENGAH","JT",NULL +"102.11",102,"JAWA_TIMUR","JI",NULL +"102.12",102,"KALIMANTAN_BARAT","KB",NULL +"102.13",102,"KALIMANTAN_SELATAN","KS",NULL +"102.14",102,"KALIMANTAN_TENGAH","KT",NULL +"102.15",102,"KALIMANTAN_TIMUR","KI",NULL +"102.16",102,"KALIMANTAN_UTARA","KU",NULL +"102.17",102,"KEPULAUAN_BANGKA_BELITUNG","BB",NULL +"102.18",102,"KEPULAUAN_RIAU","KR",NULL +"102.19",102,"LAMPUNG","LA",NULL +"102.2",102,"BALI","BA",NULL +"102.20",102,"MALUKU","MA",NULL +"102.21",102,"MALUKU_UTARA","MU",NULL +"102.22",102,"NUSA_TENGGARA_BARAT","NB",NULL +"102.23",102,"NUSA_TENGGARA_TIMUR","NT",NULL +"102.24",102,"PAPUA","PA",NULL +"102.25",102,"PAPUA_BARAT","PB",NULL +"102.26",102,"RIAU","RI",NULL +"102.27",102,"SULAWESI_BARAT","SR",NULL +"102.28",102,"SULAWESI_SELATAN","SN",NULL +"102.29",102,"SULAWESI_TENGAH","ST",NULL +"102.3",102,"BANTEN","BT",NULL +"102.30",102,"SULAWESI_TENGGARA","SG",NULL +"102.31",102,"SULAWESI_UTARA","SA",NULL +"102.32",102,"SUMATERA_BARAT","SB",NULL +"102.33",102,"SUMATERA_SELATAN","SS",NULL +"102.34",102,"SUMATERA_UTARA","SU",NULL +"102.4",102,"BENGKULU","BE",NULL +"102.5",102,"DI_YOGYAKARTA","YO",NULL +"102.6",102,"DKI_JAKARTA","JK",NULL +"102.7",102,"GORONTALO","GO",NULL +"102.8",102,"JAMBI","JA",NULL +"102.9",102,"JAWA_BARAT","JB",NULL +"10.3",10,"SAINT_GEORGE_PARISH",NULL,NULL +"103.1",103,"ALBORZ",NULL,NULL +"103.10",103,"HORMOZGAN",NULL,NULL +"103.11",103,"ILAM",NULL,NULL +"103.12",103,"ISFAHAN",NULL,NULL +"103.13",103,"KERMAN",NULL,NULL +"103.14",103,"KERMANSHAH",NULL,NULL +"103.15",103,"KHUZESTAN",NULL,NULL +"103.16",103,"KOHGILUYEH_AND_BOYER-AHMAD",NULL,NULL +"103.17",103,"KURDISTAN",NULL,NULL +"103.18",103,"LORESTAN",NULL,NULL +"103.19",103,"MARKAZI",NULL,NULL +"103.2",103,"ARDABIL",NULL,NULL +"103.20",103,"MAZANDARAN",NULL,NULL +"103.21",103,"NORTH_KHORASAN",NULL,NULL +"103.22",103,"QAZVIN",NULL,NULL +"103.23",103,"QOM",NULL,NULL +"103.24",103,"RAZAVI_KHORASAN",NULL,NULL +"103.25",103,"SEMNAN",NULL,NULL +"103.26",103,"SISTAN_AND_BALUCHESTAN",NULL,NULL +"103.27",103,"SOUTH_KHORASAN",NULL,NULL +"103.28",103,"TEHRAN",NULL,NULL +"103.29",103,"WEST_AZARBAIJAN",NULL,NULL +"103.3",103,"BUSHEHR",NULL,NULL +"103.30",103,"YAZD",NULL,NULL +"103.31",103,"ZANJAN",NULL,NULL +"103.4",103,"CHAHARMAHAL_AND_BAKHTIARI",NULL,NULL +"103.5",103,"EAST_AZERBAIJAN",NULL,NULL +"103.6",103,"FARS",NULL,NULL +"103.7",103,"GILAN",NULL,NULL +"103.8",103,"GOLESTAN",NULL,NULL +"103.9",103,"HAMADAN",NULL,NULL +"10.4",10,"SAINT_JOHN_PARISH",NULL,NULL +"104.1",104,"AL_ANBAR","AN",NULL +"104.10",104,"ERBIL","AR",NULL +"104.11",104,"KARBALA","KA",NULL +"104.12",104,"KIRKUK","KI",NULL +"104.13",104,"MAYSAN","MA",NULL +"104.14",104,"NAJAF",NULL,NULL +"104.15",104,"NINEVEH","NI",NULL +"104.16",104,"SALADIN","SD",NULL +"104.17",104,"SULAYMANIYAH","SU",NULL +"104.18",104,"WASIT","WA",NULL +"104.2",104,"AL_MUTHANNA","MU",NULL +"104.3",104,"AL-QADISIYYAH","QA",NULL +"104.4",104,"BABYLON","BB",NULL +"104.5",104,"BAGHDAD","BG",NULL +"104.6",104,"BASRA","BA",NULL +"104.7",104,"DHI_QAR","DQ",NULL +"104.8",104,"DIYALA","DI",NULL +"104.9",104,"DOHUK","DA",NULL +"10.5",10,"SAINT_MARY_PARISH",NULL,NULL +"105.1",105,"CARLOW","CW",NULL +"105.10",105,"KILDARE","KE",NULL +"105.11",105,"KILKENNY","KK",NULL +"105.12",105,"LAOIS","LS",NULL +"105.13",105,"LEINSTER","L",NULL +"105.14",105,"LIMERICK","LK",NULL +"105.15",105,"LONGFORD","LD",NULL +"105.16",105,"LOUTH","LH",NULL +"105.17",105,"MAYO","MO",NULL +"105.18",105,"MEATH","MH",NULL +"105.19",105,"MONAGHAN","MN",NULL +"105.2",105,"CAVAN","CN",NULL +"105.20",105,"MUNSTER","M",NULL +"105.21",105,"OFFALY","OY",NULL +"105.22",105,"ROSCOMMON","RN",NULL +"105.23",105,"SLIGO","SO",NULL +"105.24",105,"TIPPERARY","TA",NULL +"105.25",105,"ULSTER","U",NULL +"105.26",105,"WATERFORD","WD",NULL +"105.27",105,"WESTMEATH","WH",NULL +"105.28",105,"WEXFORD","WX",NULL +"105.29",105,"WICKLOW","WW",NULL +"105.3",105,"CLARE","CE",NULL +"105.4",105,"CONNACHT","C",NULL +"105.5",105,"CORK","CO",NULL +"105.6",105,"DONEGAL","DL",NULL +"105.7",105,"DUBLIN","D",NULL +"105.8",105,"GALWAY","G",NULL +"105.9",105,"KERRY","KY",NULL +"10.6",10,"SAINT_PAUL_PARISH",NULL,NULL +"106.1",106,"CENTRAL_DISTRICT","M",NULL +"106.2",106,"HAIFA_DISTRICT","HA",NULL +"106.3",106,"JERUSALEM_DISTRICT","JM",NULL +"106.4",106,"NORTHERN_DISTRICT","Z",NULL +"106.5",106,"SOUTHERN_DISTRICT","D",NULL +"106.6",106,"TEL_AVIV_DISTRICT","TA",NULL +"10.7",10,"SAINT_PETER_PARISH",NULL,NULL +"107.1",107,"ABRUZZO",NULL,NULL +"107.10",107,"BARLETTA-ANDRIA-TRANI","BT",NULL +"107.100",107,"TRIESTE","TS",NULL +"107.101",107,"TUSCANY",NULL,NULL +"107.102",107,"UDINE","UD",NULL +"107.103",107,"UMBRIA",NULL,NULL +"107.104",107,"VARESE","VA",NULL +"107.105",107,"VENETO",NULL,NULL +"107.106",107,"VERBANO-CUSIO-OSSOLA","VB",NULL +"107.107",107,"VERCELLI","VC",NULL +"107.108",107,"VERONA","VR",NULL +"107.109",107,"VIBO_VALENTIA","VV",NULL +"107.11",107,"BASILICATA",NULL,NULL +"107.110",107,"VICENZA","VI",NULL +"107.111",107,"VITERBO","VT",NULL +"107.12",107,"BELLUNO","BL",NULL +"107.13",107,"BENEVENTO","BN",NULL +"107.14",107,"BERGAMO","BG",NULL +"107.15",107,"BIELLA","BI",NULL +"107.16",107,"BRESCIA","BS",NULL +"107.17",107,"BRINDISI","BR",NULL +"107.18",107,"CALABRIA",NULL,NULL +"107.19",107,"CALTANISSETTA","CL",NULL +"107.2",107,"AGRIGENTO","AG",NULL +"107.20",107,"CAMPANIA",NULL,NULL +"107.21",107,"CAMPOBASSO","CB",NULL +"107.22",107,"CASERTA","CE",NULL +"107.23",107,"CATANZARO","CZ",NULL +"107.24",107,"CHIETI","CH",NULL +"107.25",107,"COMO","CO",NULL +"107.26",107,"COSENZA","CS",NULL +"107.27",107,"CREMONA","CR",NULL +"107.28",107,"CROTONE","KR",NULL +"107.29",107,"CUNEO","CN",NULL +"107.3",107,"ALESSANDRIA","AL",NULL +"107.30",107,"EMILIA-ROMAGNA",NULL,NULL +"107.31",107,"ENNA","EN",NULL +"107.32",107,"FERMO","FM",NULL +"107.33",107,"FERRARA","FE",NULL +"107.34",107,"FOGGIA","FG",NULL +"107.35",107,"FORLI-CESENA","FC",NULL +"107.36",107,"FRIULI-VENEZIA_GIULIA",NULL,NULL +"107.37",107,"FROSINONE","FR",NULL +"107.38",107,"GORIZIA","GO",NULL +"107.39",107,"GROSSETO","GR",NULL +"107.4",107,"ANCONA","AN",NULL +"107.40",107,"IMPERIA","IM",NULL +"107.41",107,"ISERNIA","IS",NULL +"107.42",107,"L'AQUILA","AQ",NULL +"107.43",107,"LA_SPEZIA","SP",NULL +"107.44",107,"LATINA","LT",NULL +"107.45",107,"LAZIO",NULL,NULL +"107.46",107,"LECCE","LE",NULL +"107.47",107,"LECCO","LC",NULL +"107.48",107,"LIGURIA",NULL,NULL +"107.49",107,"LIVORNO","LI",NULL +"107.5",107,"AOSTA_VALLEY",NULL,NULL +"107.50",107,"LODI","LO",NULL +"107.51",107,"LOMBARDY",NULL,NULL +"107.52",107,"LUCCA","LU",NULL +"107.53",107,"MACERATA","MC",NULL +"107.54",107,"MANTUA","MN",NULL +"107.55",107,"MARCHE",NULL,NULL +"107.56",107,"MASSA_AND_CARRARA","MS",NULL +"107.57",107,"MATERA","MT",NULL +"107.58",107,"MEDIO_CAMPIDANO","VS",NULL +"107.59",107,"MODENA","MO",NULL +"107.6",107,"APULIA",NULL,NULL +"107.60",107,"MOLISE",NULL,NULL +"107.61",107,"MONZA_AND_BRIANZA","MB",NULL +"107.62",107,"NOVARA","NO",NULL +"107.63",107,"NUORO","NU",NULL +"107.64",107,"ORISTANO","OR",NULL +"107.65",107,"PADUA","PD",NULL +"107.66",107,"PALERMO","PA",NULL +"107.67",107,"PARMA","PR",NULL +"107.68",107,"PAVIA","PV",NULL +"107.69",107,"PERUGIA","PG",NULL +"107.7",107,"ASCOLI_PICENO","AP",NULL +"107.70",107,"PESARO_AND_URBINO","PU",NULL +"107.71",107,"PESCARA","PE",NULL +"107.72",107,"PIACENZA","PC",NULL +"107.73",107,"PIEDMONT",NULL,NULL +"107.74",107,"PISA","PI",NULL +"107.75",107,"PISTOIA","PT",NULL +"107.76",107,"PORDENONE","PN",NULL +"107.77",107,"POTENZA","PZ",NULL +"107.78",107,"PRATO","PO",NULL +"107.79",107,"RAGUSA","RG",NULL +"107.8",107,"ASTI","AT",NULL +"107.80",107,"RAVENNA","RA",NULL +"107.81",107,"REGGIO_EMILIA","RE",NULL +"107.82",107,"RIETI","RI",NULL +"107.83",107,"RIMINI","RN",NULL +"107.84",107,"ROVIGO","RO",NULL +"107.85",107,"SALERNO","SA",NULL +"107.86",107,"SARDINIA",NULL,NULL +"107.87",107,"SASSARI","SS",NULL +"107.88",107,"SAVONA","SV",NULL +"107.89",107,"SICILY",NULL,NULL +"107.9",107,"AVELLINO","AV",NULL +"107.90",107,"SIENA","SI",NULL +"107.91",107,"SIRACUSA","SR",NULL +"107.92",107,"SONDRIO","SO",NULL +"107.93",107,"SOUTH_SARDINIA","SU",NULL +"107.94",107,"TARANTO","TA",NULL +"107.95",107,"TERAMO","TE",NULL +"107.96",107,"TERNI","TR",NULL +"107.97",107,"TRAPANI","TP",NULL +"107.98",107,"TRENTINO-SOUTH_TYROL",NULL,NULL +"107.99",107,"TREVISO","TV",NULL +"10.8",10,"SAINT_PHILIP_PARISH",NULL,NULL +"108.1",108,"CLARENDON_PARISH",NULL,NULL +"108.10",108,"SAINT_JAMES_PARISH",NULL,NULL +"108.11",108,"SAINT_MARY_PARISH",NULL,NULL +"108.12",108,"SAINT_THOMAS_PARISH",NULL,NULL +"108.13",108,"TRELAWNY_PARISH",NULL,NULL +"108.14",108,"WESTMORELAND_PARISH",NULL,NULL +"108.2",108,"HANOVER_PARISH",NULL,NULL +"108.3",108,"KINGSTON_PARISH",NULL,NULL +"108.4",108,"MANCHESTER_PARISH",NULL,NULL +"108.5",108,"PORTLAND_PARISH",NULL,NULL +"108.6",108,"SAINT_ANDREW",NULL,NULL +"108.7",108,"SAINT_ANN_PARISH",NULL,NULL +"108.8",108,"SAINT_CATHERINE_PARISH",NULL,NULL +"108.9",108,"SAINT_ELIZABETH_PARISH",NULL,NULL +"109.1",109,"AICHI_PREFECTURE",NULL,NULL +"109.10",109,"GUNMA_PREFECTURE",NULL,NULL +"109.11",109,"HIROSHIMA_PREFECTURE",NULL,NULL +"109.12",109,"HOKKAIDO_PREFECTURE",NULL,NULL +"109.13",109,"HYOGO_PREFECTURE",NULL,NULL +"109.14",109,"IBARAKI_PREFECTURE",NULL,NULL +"109.15",109,"ISHIKAWA_PREFECTURE",NULL,NULL +"109.16",109,"IWATE_PREFECTURE",NULL,NULL +"109.17",109,"KAGAWA_PREFECTURE",NULL,NULL +"109.18",109,"KAGOSHIMA_PREFECTURE",NULL,NULL +"109.19",109,"KANAGAWA_PREFECTURE",NULL,NULL +"109.2",109,"AKITA_PREFECTURE",NULL,NULL +"109.20",109,"KOCHI_PREFECTURE",NULL,NULL +"109.21",109,"KUMAMOTO_PREFECTURE",NULL,NULL +"109.22",109,"KYOTO_PREFECTURE",NULL,NULL +"109.23",109,"MIE_PREFECTURE",NULL,NULL +"109.24",109,"MIYAGI_PREFECTURE",NULL,NULL +"109.25",109,"MIYAZAKI_PREFECTURE",NULL,NULL +"109.26",109,"NAGANO_PREFECTURE",NULL,NULL +"109.27",109,"NAGASAKI_PREFECTURE",NULL,NULL +"109.28",109,"NARA_PREFECTURE",NULL,NULL +"109.29",109,"NIIGATA_PREFECTURE",NULL,NULL +"109.3",109,"AOMORI_PREFECTURE",NULL,NULL +"109.30",109,"OITA_PREFECTURE",NULL,NULL +"109.31",109,"OKAYAMA_PREFECTURE",NULL,NULL +"109.32",109,"OKINAWA_PREFECTURE",NULL,NULL +"109.33",109,"OSAKA_PREFECTURE",NULL,NULL +"109.34",109,"SAGA_PREFECTURE",NULL,NULL +"109.35",109,"SAITAMA_PREFECTURE",NULL,NULL +"109.36",109,"SHIGA_PREFECTURE",NULL,NULL +"109.37",109,"SHIMANE_PREFECTURE",NULL,NULL +"109.38",109,"SHIZUOKA_PREFECTURE",NULL,NULL +"109.39",109,"TOCHIGI_PREFECTURE",NULL,NULL +"109.4",109,"CHIBA_PREFECTURE",NULL,NULL +"109.40",109,"TOKUSHIMA_PREFECTURE",NULL,NULL +"109.41",109,"TOKYO",NULL,NULL +"109.42",109,"TOTTORI_PREFECTURE",NULL,NULL +"109.43",109,"TOYAMA_PREFECTURE",NULL,NULL +"109.44",109,"WAKAYAMA_PREFECTURE",NULL,NULL +"109.45",109,"YAMAGATA_PREFECTURE",NULL,NULL +"109.46",109,"YAMAGUCHI_PREFECTURE",NULL,NULL +"109.47",109,"YAMANASHI_PREFECTURE",NULL,NULL +"109.5",109,"EHIME_PREFECTURE",NULL,NULL +"109.6",109,"FUKUI_PREFECTURE",NULL,NULL +"109.7",109,"FUKUOKA_PREFECTURE",NULL,NULL +"109.8",109,"FUKUSHIMA_PREFECTURE",NULL,NULL +"109.9",109,"GIFU_PREFECTURE",NULL,NULL +"1.1",1,"BADAKHSHAN","BDS",NULL +"1.10",1,"GHOR","GHO",NULL +"1.11",1,"HELMAND","HEL",NULL +"11.1",11,"BUENOS_AIRES","B",NULL +"11.10",11,"JUJUY","Y",NULL +"11.11",11,"LA_PAMPA","L",NULL +"111.1",111,"AJLOUN","AJ",NULL +"111.10",111,"MAFRAQ","MA",NULL +"111.11",111,"TAFILAH","AT",NULL +"111.12",111,"ZARQA","AZ",NULL +"11.12",11,"LA_RIOJA","F",NULL +"111.2",111,"AMMAN","AM",NULL +"11.13",11,"MENDOZA","M",NULL +"111.3",111,"AQABA","AQ",NULL +"11.14",11,"MISIONES","N",NULL +"111.4",111,"BALQA","BA",NULL +"11.15",11,"NEUQUEN","Q",NULL +"111.5",111,"IRBID","IR",NULL +"11.16",11,"RIO_NEGRO","R",NULL +"111.6",111,"JERASH","JA",NULL +"11.17",11,"SALTA","A",NULL +"111.7",111,"KARAK","KA",NULL +"11.18",11,"SAN_JUAN","J",NULL +"111.8",111,"MA'AN","MN",NULL +"11.19",11,"SAN_LUIS","D",NULL +"111.9",111,"MADABA","MD",NULL +"1.12",1,"HERAT","HER",NULL +"11.2",11,"CATAMARCA","K",NULL +"11.20",11,"SANTA_CRUZ","Z",NULL +"11.21",11,"SANTA_FE","S",NULL +"112.1",112,"AKMOLA_REGION","AKM",NULL +"112.10",112,"KOSTANAY_REGION","KUS",NULL +"112.11",112,"KYZYLORDA_REGION","KZY",NULL +"112.12",112,"MANGYSTAU_REGION","MAN",NULL +"112.13",112,"NORTH_KAZAKHSTAN_REGION","SEV",NULL +"112.14",112,"NUR-SULTAN","AST",NULL +"112.15",112,"PAVLODAR_REGION","PAV",NULL +"112.16",112,"TURKESTAN_REGION","YUZ",NULL +"112.17",112,"WEST_KAZAKHSTAN_PROVINCE","ZAP",NULL +"11.22",11,"SANTIAGO_DEL_ESTERO","G",NULL +"112.2",112,"AKTOBE_REGION","AKT",NULL +"11.23",11,"TIERRA_DEL_FUEGO","V",NULL +"112.3",112,"ALMATY","ALA",NULL +"11.24",11,"TUCUMAN","T",NULL +"112.4",112,"ALMATY_REGION","ALM",NULL +"112.5",112,"ATYRAU_REGION","ATY",NULL +"112.6",112,"BAIKONUR","BAY",NULL +"112.7",112,"EAST_KAZAKHSTAN_REGION","VOS",NULL +"112.8",112,"JAMBYL_REGION","ZHA",NULL +"112.9",112,"KARAGANDA_REGION","KAR",NULL +"1.13",1,"JOWZJAN","JOW",NULL +"11.3",11,"CHACO","H",NULL +"113.1",113,"BARINGO",NULL,NULL +"113.10",113,"KAJIADO",NULL,NULL +"113.11",113,"KAKAMEGA",NULL,NULL +"113.12",113,"KERICHO",NULL,NULL +"113.13",113,"KIAMBU",NULL,NULL +"113.14",113,"KILIFI",NULL,NULL +"113.15",113,"KIRINYAGA",NULL,NULL +"113.16",113,"KISII",NULL,NULL +"113.17",113,"KISUMU",NULL,NULL +"113.18",113,"KITUI",NULL,NULL +"113.19",113,"KWALE",NULL,NULL +"113.2",113,"BOMET",NULL,NULL +"113.20",113,"LAIKIPIA",NULL,NULL +"113.21",113,"LAMU",NULL,NULL +"113.22",113,"MACHAKOS",NULL,NULL +"113.23",113,"MAKUENI",NULL,NULL +"113.24",113,"MANDERA",NULL,NULL +"113.25",113,"MARSABIT",NULL,NULL +"113.26",113,"MERU",NULL,NULL +"113.27",113,"MIGORI",NULL,NULL +"113.28",113,"MOMBASA",NULL,NULL +"113.29",113,"MURANG'A",NULL,NULL +"113.3",113,"BUNGOMA",NULL,NULL +"113.30",113,"NAIROBI_CITY",NULL,NULL +"113.31",113,"NAKURU",NULL,NULL +"113.32",113,"NANDI",NULL,NULL +"113.33",113,"NAROK",NULL,NULL +"113.34",113,"NYAMIRA",NULL,NULL +"113.35",113,"NYANDARUA",NULL,NULL +"113.36",113,"NYERI",NULL,NULL +"113.37",113,"SAMBURU",NULL,NULL +"113.38",113,"SIAYA",NULL,NULL +"113.39",113,"TAITA-TAVETA",NULL,NULL +"113.4",113,"BUSIA",NULL,NULL +"113.40",113,"TANA_RIVER",NULL,NULL +"113.41",113,"THARAKA-NITHI",NULL,NULL +"113.42",113,"TRANS_NZOIA",NULL,NULL +"113.43",113,"TURKANA",NULL,NULL +"113.44",113,"UASIN_GISHU",NULL,NULL +"113.45",113,"VIHIGA",NULL,NULL +"113.46",113,"WAJIR",NULL,NULL +"113.47",113,"WEST_POKOT",NULL,NULL +"113.5",113,"ELGEYO-MARAKWET",NULL,NULL +"113.6",113,"EMBU",NULL,NULL +"113.7",113,"GARISSA",NULL,NULL +"113.8",113,"HOMA_BAY",NULL,NULL +"113.9",113,"ISIOLO",NULL,NULL +"1.14",1,"KABUL","KAB",NULL +"11.4",11,"CHUBUT","U",NULL +"114.1",114,"GILBERT_ISLANDS","G",NULL +"114.2",114,"LINE_ISLANDS","L",NULL +"114.3",114,"PHOENIX_ISLANDS","P",NULL +"1.15",1,"KANDAHAR","KAN",NULL +"11.5",11,"CIUDAD_AUTONOMA_DE_BUENOS_AIRES","C",NULL +"115.1",115,"CHAGANG_PROVINCE",NULL,NULL +"115.10",115,"SOUTH_HWANGHAE_PROVINCE",NULL,NULL +"115.11",115,"SOUTH_PYONGAN_PROVINCE",NULL,NULL +"115.2",115,"KANGWON_PROVINCE",NULL,NULL +"115.3",115,"NORTH_HAMGYONG_PROVINCE",NULL,NULL +"115.4",115,"NORTH_HWANGHAE_PROVINCE",NULL,NULL +"115.5",115,"NORTH_PYONGAN_PROVINCE",NULL,NULL +"115.6",115,"PYONGYANG",NULL,NULL +"115.7",115,"RASON",NULL,NULL +"115.8",115,"RYANGGANG_PROVINCE",NULL,NULL +"115.9",115,"SOUTH_HAMGYONG_PROVINCE",NULL,NULL +"1.16",1,"KAPISA","KAP",NULL +"11.6",11,"CORDOBA","X",NULL +"116.1",116,"BUSAN",NULL,NULL +"116.10",116,"NORTH_GYEONGSANG_PROVINCE",NULL,NULL +"116.11",116,"NORTH_JEOLLA_PROVINCE",NULL,NULL +"116.12",116,"SEJONG_CITY",NULL,NULL +"116.13",116,"SEOUL",NULL,NULL +"116.14",116,"SOUTH_CHUNGCHEONG_PROVINCE",NULL,NULL +"116.15",116,"SOUTH_GYEONGSANG_PROVINCE",NULL,NULL +"116.16",116,"SOUTH_JEOLLA_PROVINCE",NULL,NULL +"116.17",116,"ULSAN",NULL,NULL +"116.2",116,"DAEGU",NULL,NULL +"116.3",116,"DAEJEON",NULL,NULL +"116.4",116,"GANGWON_PROVINCE",NULL,NULL +"116.5",116,"GWANGJU",NULL,NULL +"116.6",116,"GYEONGGI_PROVINCE",NULL,NULL +"116.7",116,"INCHEON",NULL,NULL +"116.8",116,"JEJU",NULL,NULL +"116.9",116,"NORTH_CHUNGCHEONG_PROVINCE",NULL,NULL +"1.17",1,"KHOST","KHO",NULL +"11.7",11,"CORRIENTES","W",NULL +"117.1",117,"AL_AHMADI","AH",NULL +"117.2",117,"AL_FARWANIYAH","FA",NULL +"117.3",117,"AL_JAHRA","JA",NULL +"117.4",117,"CAPITAL","KU",NULL +"117.5",117,"HAWALLI","HA",NULL +"117.6",117,"MUBARAK_AL-KABEER","MU",NULL +"1.18",1,"KUNAR","KNR",NULL +"11.8",11,"ENTRE_RIOS","E",NULL +"118.1",118,"BATKEN_REGION","B",NULL +"118.2",118,"BISHKEK","GB",NULL +"118.3",118,"CHUY_REGION","C",NULL +"118.4",118,"ISSYK-KUL_REGION","Y",NULL +"118.5",118,"JALAL-ABAD_REGION","J",NULL +"118.6",118,"NARYN_REGION","N",NULL +"118.7",118,"OSH","GO",NULL +"118.8",118,"OSH_REGION","O",NULL +"118.9",118,"TALAS_REGION","T",NULL +"1.19",1,"KUNDUZ_PROVINCE","KDZ",NULL +"11.9",11,"FORMOSA","P",NULL +"119.1",119,"ATTAPEU_PROVINCE","AT",NULL +"119.10",119,"PHONGSALY_PROVINCE","PH",NULL +"119.11",119,"SAINYABULI_PROVINCE","XA",NULL +"119.12",119,"SALAVAN_PROVINCE","SL",NULL +"119.13",119,"SAVANNAKHET_PROVINCE","SV",NULL +"119.14",119,"SEKONG_PROVINCE","XE",NULL +"119.15",119,"VIENTIANE_PREFECTURE","VT",NULL +"119.16",119,"VIENTIANE_PROVINCE","VI",NULL +"119.17",119,"XAISOMBOUN","XN",NULL +"119.18",119,"XAISOMBOUN_PROVINCE","XS",NULL +"119.19",119,"XIANGKHOUANG_PROVINCE","XI",NULL +"119.2",119,"BOKEO_PROVINCE","BK",NULL +"119.3",119,"BOLIKHAMSAI_PROVINCE","BL",NULL +"119.4",119,"CHAMPASAK_PROVINCE","CH",NULL +"119.5",119,"HOUAPHANH_PROVINCE","HO",NULL +"119.6",119,"KHAMMOUANE_PROVINCE","KH",NULL +"119.7",119,"LUANG_NAMTHA_PROVINCE","LM",NULL +"119.8",119,"LUANG_PRABANG_PROVINCE","LP",NULL +"119.9",119,"OUDOMXAY_PROVINCE","OU",NULL +"1.2",1,"BADGHIS","BDG",NULL +"1.20",1,"LAGHMAN","LAG",NULL +"120.1",120,"AGLONA_MUNICIPALITY",NULL,NULL +"120.10",120,"AUCE_MUNICIPALITY",NULL,NULL +"120.100",120,"SMILTENE_MUNICIPALITY",NULL,NULL +"120.101",120,"STOPINI_MUNICIPALITY",NULL,NULL +"120.102",120,"STRENCI_MUNICIPALITY",NULL,NULL +"120.103",120,"TALSI_MUNICIPALITY",NULL,NULL +"120.104",120,"TERVETE_MUNICIPALITY",NULL,NULL +"120.105",120,"TUKUMS_MUNICIPALITY",NULL,NULL +"120.106",120,"VAINODE_MUNICIPALITY",NULL,NULL +"120.107",120,"VALKA_MUNICIPALITY",NULL,NULL +"120.108",120,"VALMIERA","VMR",NULL +"120.109",120,"VARAKLANI_MUNICIPALITY",NULL,NULL +"120.11",120,"BABITE_MUNICIPALITY",NULL,NULL +"120.110",120,"VARKAVA_MUNICIPALITY",NULL,NULL +"120.111",120,"VECPIEBALGA_MUNICIPALITY",NULL,NULL +"120.112",120,"VECUMNIEKI_MUNICIPALITY",NULL,NULL +"120.113",120,"VENTSPILS","VEN",NULL +"120.114",120,"VENTSPILS_MUNICIPALITY",NULL,NULL +"120.115",120,"VIESITE_MUNICIPALITY",NULL,NULL +"120.116",120,"VILAKA_MUNICIPALITY",NULL,NULL +"120.117",120,"VILANI_MUNICIPALITY",NULL,NULL +"120.118",120,"ZILUPE_MUNICIPALITY",NULL,NULL +"120.12",120,"BALDONE_MUNICIPALITY",NULL,NULL +"120.13",120,"BALTINAVA_MUNICIPALITY",NULL,NULL +"120.14",120,"BALVI_MUNICIPALITY",NULL,NULL +"120.15",120,"BAUSKA_MUNICIPALITY",NULL,NULL +"120.16",120,"BEVERINA_MUNICIPALITY",NULL,NULL +"120.17",120,"BROCENI_MUNICIPALITY",NULL,NULL +"120.18",120,"BURTNIEKI_MUNICIPALITY",NULL,NULL +"120.19",120,"CARNIKAVA_MUNICIPALITY",NULL,NULL +"120.2",120,"AIZKRAUKLE_MUNICIPALITY",NULL,NULL +"120.20",120,"CESIS_MUNICIPALITY",NULL,NULL +"120.21",120,"CESVAINE_MUNICIPALITY",NULL,NULL +"120.22",120,"CIBLA_MUNICIPALITY",NULL,NULL +"120.23",120,"DAGDA_MUNICIPALITY",NULL,NULL +"120.24",120,"DAUGAVPILS","DGV",NULL +"120.25",120,"DAUGAVPILS_MUNICIPALITY",NULL,NULL +"120.26",120,"DOBELE_MUNICIPALITY",NULL,NULL +"120.27",120,"DUNDAGA_MUNICIPALITY",NULL,NULL +"120.28",120,"DURBE_MUNICIPALITY",NULL,NULL +"120.29",120,"ENGURE_MUNICIPALITY",NULL,NULL +"120.3",120,"AIZPUTE_MUNICIPALITY",NULL,NULL +"120.30",120,"ERGLI_MUNICIPALITY",NULL,NULL +"120.31",120,"GARKALNE_MUNICIPALITY",NULL,NULL +"120.32",120,"GROBINA_MUNICIPALITY",NULL,NULL +"120.33",120,"GULBENE_MUNICIPALITY",NULL,NULL +"120.34",120,"IECAVA_MUNICIPALITY",NULL,NULL +"120.35",120,"IKSKILE_MUNICIPALITY",NULL,NULL +"120.36",120,"ILUKSTE_MUNICIPALITY",NULL,NULL +"120.37",120,"INCUKALNS_MUNICIPALITY",NULL,NULL +"120.38",120,"JAUNJELGAVA_MUNICIPALITY",NULL,NULL +"120.39",120,"JAUNPIEBALGA_MUNICIPALITY",NULL,NULL +"120.4",120,"AKNISTE_MUNICIPALITY",NULL,NULL +"120.40",120,"JAUNPILS_MUNICIPALITY",NULL,NULL +"120.41",120,"JEKABPILS","JKB",NULL +"120.42",120,"JEKABPILS_MUNICIPALITY",NULL,NULL +"120.43",120,"JELGAVA","JEL",NULL +"120.44",120,"JELGAVA_MUNICIPALITY",NULL,NULL +"120.45",120,"JURMALA","JUR",NULL +"120.46",120,"KANDAVA_MUNICIPALITY",NULL,NULL +"120.47",120,"KARSAVA_MUNICIPALITY",NULL,NULL +"120.48",120,"KEGUMS_MUNICIPALITY",NULL,NULL +"120.49",120,"KEKAVA_MUNICIPALITY",NULL,NULL +"120.5",120,"ALOJA_MUNICIPALITY",NULL,NULL +"120.50",120,"KOCENI_MUNICIPALITY",NULL,NULL +"120.51",120,"KOKNESE_MUNICIPALITY",NULL,NULL +"120.52",120,"KRASLAVA_MUNICIPALITY",NULL,NULL +"120.53",120,"KRIMULDA_MUNICIPALITY",NULL,NULL +"120.54",120,"KRUSTPILS_MUNICIPALITY",NULL,NULL +"120.55",120,"KULDIGA_MUNICIPALITY",NULL,NULL +"120.56",120,"LIELVARDE_MUNICIPALITY",NULL,NULL +"120.57",120,"LIEPAJA","LPX",NULL +"120.58",120,"LIGATNE_MUNICIPALITY",NULL,NULL +"120.59",120,"LIMBAZI_MUNICIPALITY",NULL,NULL +"120.6",120,"ALSUNGA_MUNICIPALITY",NULL,NULL +"120.60",120,"LIVANI_MUNICIPALITY",NULL,NULL +"120.61",120,"LUBANA_MUNICIPALITY",NULL,NULL +"120.62",120,"LUDZA_MUNICIPALITY",NULL,NULL +"120.63",120,"MADONA_MUNICIPALITY",NULL,NULL +"120.64",120,"MALPILS_MUNICIPALITY",NULL,NULL +"120.65",120,"MARUPE_MUNICIPALITY",NULL,NULL +"120.66",120,"MAZSALACA_MUNICIPALITY",NULL,NULL +"120.67",120,"MERSRAGS_MUNICIPALITY",NULL,NULL +"120.68",120,"NAUKSENI_MUNICIPALITY",NULL,NULL +"120.69",120,"NERETA_MUNICIPALITY",NULL,NULL +"120.7",120,"ALUKSNE_MUNICIPALITY",NULL,NULL +"120.70",120,"NICA_MUNICIPALITY",NULL,NULL +"120.71",120,"OGRE_MUNICIPALITY",NULL,NULL +"120.72",120,"OLAINE_MUNICIPALITY",NULL,NULL +"120.73",120,"OZOLNIEKI_MUNICIPALITY",NULL,NULL +"120.74",120,"PARGAUJA_MUNICIPALITY",NULL,NULL +"120.75",120,"PAVILOSTA_MUNICIPALITY",NULL,NULL +"120.76",120,"PLAVINAS_MUNICIPALITY",NULL,NULL +"120.77",120,"PREILI_MUNICIPALITY",NULL,NULL +"120.78",120,"PRIEKULE_MUNICIPALITY",NULL,NULL +"120.79",120,"PRIEKULI_MUNICIPALITY",NULL,NULL +"120.8",120,"AMATA_MUNICIPALITY",NULL,NULL +"120.80",120,"RAUNA_MUNICIPALITY",NULL,NULL +"120.81",120,"REZEKNE","REZ",NULL +"120.82",120,"REZEKNE_MUNICIPALITY",NULL,NULL +"120.83",120,"RIEBINI_MUNICIPALITY",NULL,NULL +"120.84",120,"RIGA","RIX",NULL +"120.85",120,"ROJA_MUNICIPALITY",NULL,NULL +"120.86",120,"ROPAZI_MUNICIPALITY",NULL,NULL +"120.87",120,"RUCAVA_MUNICIPALITY",NULL,NULL +"120.88",120,"RUGAJI_MUNICIPALITY",NULL,NULL +"120.89",120,"RUJIENA_MUNICIPALITY",NULL,NULL +"120.9",120,"APE_MUNICIPALITY",NULL,NULL +"120.90",120,"RUNDALE_MUNICIPALITY",NULL,NULL +"120.91",120,"SALA_MUNICIPALITY",NULL,NULL +"120.92",120,"SALACGRIVA_MUNICIPALITY",NULL,NULL +"120.93",120,"SALASPILS_MUNICIPALITY",NULL,NULL +"120.94",120,"SALDUS_MUNICIPALITY",NULL,NULL +"120.95",120,"SAULKRASTI_MUNICIPALITY",NULL,NULL +"120.96",120,"SEJA_MUNICIPALITY",NULL,NULL +"120.97",120,"SIGULDA_MUNICIPALITY",NULL,NULL +"120.98",120,"SKRIVERI_MUNICIPALITY",NULL,NULL +"120.99",120,"SKRUNDA_MUNICIPALITY",NULL,NULL +"1.21",1,"LOGAR","LOG",NULL +"12.1",12,"ARAGATSOTN_REGION","AG",NULL +"12.10",12,"VAYOTS_DZOR_REGION","VD",NULL +"12.11",12,"YEREVAN","ER",NULL +"121.1",121,"AKKAR","AK",NULL +"121.2",121,"BAALBEK-HERMEL","BH",NULL +"121.3",121,"BEIRUT","BA",NULL +"121.4",121,"BEQAA","BI",NULL +"121.5",121,"MOUNT_LEBANON","JL",NULL +"121.6",121,"NABATIEH",NULL,NULL +"121.7",121,"NORTH","AS",NULL +"121.8",121,"SOUTH","JA",NULL +"1.22",1,"NANGARHAR","NAN",NULL +"12.2",12,"ARARAT_PROVINCE","AR",NULL +"122.1",122,"BEREA_DISTRICT","D",NULL +"122.10",122,"THABA-TSEKA_DISTRICT","K",NULL +"122.2",122,"BUTHA-BUTHE_DISTRICT","B",NULL +"122.3",122,"LERIBE_DISTRICT","C",NULL +"122.4",122,"MAFETENG_DISTRICT","E",NULL +"122.5",122,"MASERU_DISTRICT","A",NULL +"122.6",122,"MOHALE'S_HOEK_DISTRICT","F",NULL +"122.7",122,"MOKHOTLONG_DISTRICT","J",NULL +"122.8",122,"QACHA'S_NEK_DISTRICT","H",NULL +"122.9",122,"QUTHING_DISTRICT","G",NULL +"1.23",1,"NIMRUZ","NIM",NULL +"12.3",12,"ARMAVIR_REGION","AV",NULL +"123.1",123,"BOMI_COUNTY","BM",NULL +"123.10",123,"MARYLAND_COUNTY","MY",NULL +"123.11",123,"MONTSERRADO_COUNTY","MO",NULL +"123.12",123,"NIMBA","NI",NULL +"123.13",123,"RIVER_CESS_COUNTY","RI",NULL +"123.14",123,"RIVER_GEE_COUNTY","RG",NULL +"123.15",123,"SINOE_COUNTY","SI",NULL +"123.2",123,"BONG_COUNTY","BG",NULL +"123.3",123,"GBARPOLU_COUNTY","GP",NULL +"123.4",123,"GRAND_BASSA_COUNTY","GB",NULL +"123.5",123,"GRAND_CAPE_MOUNT_COUNTY","CM",NULL +"123.6",123,"GRAND_GEDEH_COUNTY","GG",NULL +"123.7",123,"GRAND_KRU_COUNTY","GK",NULL +"123.8",123,"LOFA_COUNTY","LO",NULL +"123.9",123,"MARGIBI_COUNTY","MG",NULL +"1.24",1,"NURISTAN","NUR",NULL +"12.4",12,"GEGHARKUNIK_PROVINCE","GR",NULL +"124.1",124,"AL_WAHAT_DISTRICT","WA",NULL +"124.10",124,"MARJ_DISTRICT","MJ",NULL +"124.11",124,"MISRATA_DISTRICT","MI",NULL +"124.12",124,"MURQUB","MB",NULL +"124.13",124,"MURZUQ_DISTRICT","MQ",NULL +"124.14",124,"NALUT_DISTRICT","NL",NULL +"124.15",124,"NUQAT_AL_KHAMS","NQ",NULL +"124.16",124,"SABHA_DISTRICT","SB",NULL +"124.17",124,"SIRTE_DISTRICT","SR",NULL +"124.18",124,"TRIPOLI_DISTRICT","TB",NULL +"124.19",124,"WADI_AL_HAYAA_DISTRICT","WD",NULL +"124.2",124,"BENGHAZI","BA",NULL +"124.20",124,"WADI_AL_SHATII_DISTRICT","WS",NULL +"124.21",124,"ZAWIYA_DISTRICT","ZA",NULL +"124.3",124,"DERNA_DISTRICT","DR",NULL +"124.4",124,"GHAT_DISTRICT","GT",NULL +"124.5",124,"JABAL_AL_AKHDAR","JA",NULL +"124.6",124,"JABAL_AL_GHARBI_DISTRICT","JG",NULL +"124.7",124,"JAFARA","JI",NULL +"124.8",124,"JUFRA","JU",NULL +"124.9",124,"KUFRA_DISTRICT","KF",NULL +"1.25",1,"PAKTIA","PIA",NULL +"12.5",12,"KOTAYK_REGION","KT",NULL +"125.1",125,"BALZERS",NULL,NULL +"125.10",125,"TRIESENBERG",NULL,NULL +"125.11",125,"VADUZ",NULL,NULL +"125.2",125,"ESCHEN",NULL,NULL +"125.3",125,"GAMPRIN",NULL,NULL +"125.4",125,"MAUREN",NULL,NULL +"125.5",125,"PLANKEN",NULL,NULL +"125.6",125,"RUGGELL",NULL,NULL +"125.7",125,"SCHAAN",NULL,NULL +"125.8",125,"SCHELLENBERG",NULL,NULL +"125.9",125,"TRIESEN",NULL,NULL +"1.26",1,"PAKTIKA","PKA",NULL +"12.6",12,"LORI_REGION","LO",NULL +"126.1",126,"AKMENE_DISTRICT_MUNICIPALITY",NULL,NULL +"126.10",126,"JONAVA_DISTRICT_MUNICIPALITY",NULL,NULL +"126.11",126,"JONISKIS_DISTRICT_MUNICIPALITY",NULL,NULL +"126.12",126,"JURBARKAS_DISTRICT_MUNICIPALITY",NULL,NULL +"126.13",126,"KAISIADORYS_DISTRICT_MUNICIPALITY",NULL,NULL +"126.14",126,"KALVARIJA_MUNICIPALITY",NULL,NULL +"126.15",126,"KAUNAS_CITY_MUNICIPALITY",NULL,NULL +"126.16",126,"KAUNAS_COUNTY","KU",NULL +"126.17",126,"KAUNAS_DISTRICT_MUNICIPALITY",NULL,NULL +"126.18",126,"KAZLU_RUDA_MUNICIPALITY",NULL,NULL +"126.19",126,"KEDAINIAI_DISTRICT_MUNICIPALITY",NULL,NULL +"126.2",126,"ALYTUS_CITY_MUNICIPALITY",NULL,NULL +"126.20",126,"KELME_DISTRICT_MUNICIPALITY",NULL,NULL +"126.21",126,"KLAIPEDA_CITY_MUNICIPALITY",NULL,NULL +"126.22",126,"KLAIPEDA_COUNTY","KL",NULL +"126.23",126,"KLAIPEDA_DISTRICT_MUNICIPALITY",NULL,NULL +"126.24",126,"KRETINGA_DISTRICT_MUNICIPALITY",NULL,NULL +"126.25",126,"KUPISKIS_DISTRICT_MUNICIPALITY",NULL,NULL +"126.26",126,"LAZDIJAI_DISTRICT_MUNICIPALITY",NULL,NULL +"126.27",126,"MARIJAMPOLE_COUNTY","MR",NULL +"126.28",126,"MARIJAMPOLE_MUNICIPALITY",NULL,NULL +"126.29",126,"MAZEIKIAI_DISTRICT_MUNICIPALITY",NULL,NULL +"126.3",126,"ALYTUS_COUNTY","AL",NULL +"126.30",126,"MOLETAI_DISTRICT_MUNICIPALITY",NULL,NULL +"126.31",126,"NERINGA_MUNICIPALITY",NULL,NULL +"126.32",126,"PAGEGIAI_MUNICIPALITY",NULL,NULL +"126.33",126,"PAKRUOJIS_DISTRICT_MUNICIPALITY",NULL,NULL +"126.34",126,"PALANGA_CITY_MUNICIPALITY",NULL,NULL +"126.35",126,"PANEVEZYS_CITY_MUNICIPALITY",NULL,NULL +"126.36",126,"PANEVEZYS_COUNTY","PN",NULL +"126.37",126,"PANEVEZYS_DISTRICT_MUNICIPALITY",NULL,NULL +"126.38",126,"PASVALYS_DISTRICT_MUNICIPALITY",NULL,NULL +"126.39",126,"PLUNGE_DISTRICT_MUNICIPALITY",NULL,NULL +"126.4",126,"ALYTUS_DISTRICT_MUNICIPALITY",NULL,NULL +"126.40",126,"PRIENAI_DISTRICT_MUNICIPALITY",NULL,NULL +"126.41",126,"RADVILISKIS_DISTRICT_MUNICIPALITY",NULL,NULL +"126.42",126,"RASEINIAI_DISTRICT_MUNICIPALITY",NULL,NULL +"126.43",126,"RIETAVAS_MUNICIPALITY",NULL,NULL +"126.44",126,"ROKISKIS_DISTRICT_MUNICIPALITY",NULL,NULL +"126.45",126,"SAKIAI_DISTRICT_MUNICIPALITY",NULL,NULL +"126.46",126,"SALCININKAI_DISTRICT_MUNICIPALITY",NULL,NULL +"126.47",126,"SIAULIAI_CITY_MUNICIPALITY",NULL,NULL +"126.48",126,"SIAULIAI_COUNTY","SA",NULL +"126.49",126,"SIAULIAI_DISTRICT_MUNICIPALITY",NULL,NULL +"126.5",126,"BIRSTONAS_MUNICIPALITY",NULL,NULL +"126.50",126,"SILALE_DISTRICT_MUNICIPALITY",NULL,NULL +"126.51",126,"SILUTE_DISTRICT_MUNICIPALITY",NULL,NULL +"126.52",126,"SIRVINTOS_DISTRICT_MUNICIPALITY",NULL,NULL +"126.53",126,"SKUODAS_DISTRICT_MUNICIPALITY",NULL,NULL +"126.54",126,"SVENCIONYS_DISTRICT_MUNICIPALITY",NULL,NULL +"126.55",126,"TAURAGE_COUNTY","TA",NULL +"126.56",126,"TAURAGE_DISTRICT_MUNICIPALITY",NULL,NULL +"126.57",126,"TELSIAI_COUNTY","TE",NULL +"126.58",126,"TELSIAI_DISTRICT_MUNICIPALITY",NULL,NULL +"126.59",126,"TRAKAI_DISTRICT_MUNICIPALITY",NULL,NULL +"126.6",126,"BIRZAI_DISTRICT_MUNICIPALITY",NULL,NULL +"126.60",126,"UKMERGE_DISTRICT_MUNICIPALITY",NULL,NULL +"126.61",126,"UTENA_COUNTY","UT",NULL +"126.62",126,"UTENA_DISTRICT_MUNICIPALITY",NULL,NULL +"126.63",126,"VARENA_DISTRICT_MUNICIPALITY",NULL,NULL +"126.64",126,"VILKAVISKIS_DISTRICT_MUNICIPALITY",NULL,NULL +"126.65",126,"VILNIUS_CITY_MUNICIPALITY",NULL,NULL +"126.66",126,"VILNIUS_COUNTY","VL",NULL +"126.67",126,"VILNIUS_DISTRICT_MUNICIPALITY",NULL,NULL +"126.68",126,"VISAGINAS_MUNICIPALITY",NULL,NULL +"126.69",126,"ZARASAI_DISTRICT_MUNICIPALITY",NULL,NULL +"126.7",126,"DRUSKININKAI_MUNICIPALITY",NULL,NULL +"126.8",126,"ELEKTRENAI_MUNICIPALITY",NULL,NULL +"126.9",126,"IGNALINA_DISTRICT_MUNICIPALITY",NULL,NULL +"1.27",1,"PANJSHIR","PAN",NULL +"12.7",12,"SHIRAK_REGION","SH",NULL +"127.1",127,"CANTON_OF_CAPELLEN","CA",NULL +"127.10",127,"CANTON_OF_REMICH","RM",NULL +"127.11",127,"CANTON_OF_VIANDEN","VD",NULL +"127.12",127,"CANTON_OF_WILTZ","WI",NULL +"127.13",127,"DIEKIRCH_DISTRICT","D",NULL +"127.14",127,"GREVENMACHER_DISTRICT","G",NULL +"127.15",127,"LUXEMBOURG_DISTRICT","L",NULL +"127.2",127,"CANTON_OF_CLERVAUX","CL",NULL +"127.3",127,"CANTON_OF_DIEKIRCH","DI",NULL +"127.4",127,"CANTON_OF_ECHTERNACH","EC",NULL +"127.5",127,"CANTON_OF_ESCH-SUR-ALZETTE","ES",NULL +"127.6",127,"CANTON_OF_GREVENMACHER","GR",NULL +"127.7",127,"CANTON_OF_LUXEMBOURG","LU",NULL +"127.8",127,"CANTON_OF_MERSCH","ME",NULL +"127.9",127,"CANTON_OF_REDANGE","RD",NULL +"1.28",1,"PARWAN","PAR",NULL +"12.8",12,"SYUNIK_PROVINCE","SU",NULL +"1.29",1,"SAMANGAN","SAM",NULL +"12.9",12,"TAVUSH_REGION","TV",NULL +"129.1",129,"AERODROM_MUNICIPALITY",NULL,NULL +"129.10",129,"CAIR_MUNICIPALITY",NULL,NULL +"129.11",129,"CASKA_MUNICIPALITY",NULL,NULL +"129.12",129,"CENTAR_MUNICIPALITY",NULL,NULL +"129.13",129,"CENTAR_ZUPA_MUNICIPALITY",NULL,NULL +"129.14",129,"CESINOVO-OBLESEVO_MUNICIPALITY",NULL,NULL +"129.15",129,"CUCER-SANDEVO_MUNICIPALITY",NULL,NULL +"129.16",129,"DEBARCA_MUNICIPALITY",NULL,NULL +"129.17",129,"DELCEVO_MUNICIPALITY",NULL,NULL +"129.18",129,"DEMIR_HISAR_MUNICIPALITY",NULL,NULL +"129.19",129,"DEMIR_KAPIJA_MUNICIPALITY",NULL,NULL +"129.2",129,"ARACINOVO_MUNICIPALITY",NULL,NULL +"129.20",129,"DOJRAN_MUNICIPALITY",NULL,NULL +"129.21",129,"DOLNENI_MUNICIPALITY",NULL,NULL +"129.22",129,"DRUGOVO_MUNICIPALITY",NULL,NULL +"129.23",129,"GAZI_BABA_MUNICIPALITY",NULL,NULL +"129.24",129,"GEVGELIJA_MUNICIPALITY",NULL,NULL +"129.25",129,"GJORCE_PETROV_MUNICIPALITY",NULL,NULL +"129.26",129,"GOSTIVAR_MUNICIPALITY",NULL,NULL +"129.27",129,"GRADSKO_MUNICIPALITY",NULL,NULL +"129.28",129,"GREATER_SKOPJE",NULL,NULL +"129.29",129,"ILINDEN_MUNICIPALITY",NULL,NULL +"129.3",129,"BEROVO_MUNICIPALITY",NULL,NULL +"129.30",129,"JEGUNOVCE_MUNICIPALITY",NULL,NULL +"129.31",129,"KARBINCI",NULL,NULL +"129.32",129,"KARPOS_MUNICIPALITY",NULL,NULL +"129.33",129,"KAVADARCI_MUNICIPALITY",NULL,NULL +"129.34",129,"KICEVO_MUNICIPALITY",NULL,NULL +"129.35",129,"KISELA_VODA_MUNICIPALITY",NULL,NULL +"129.36",129,"KOCANI_MUNICIPALITY",NULL,NULL +"129.37",129,"KONCE_MUNICIPALITY",NULL,NULL +"129.38",129,"KRATOVO_MUNICIPALITY",NULL,NULL +"129.39",129,"KRIVA_PALANKA_MUNICIPALITY",NULL,NULL +"129.4",129,"BITOLA_MUNICIPALITY",NULL,NULL +"129.40",129,"KRIVOGASTANI_MUNICIPALITY",NULL,NULL +"129.41",129,"KRUSEVO_MUNICIPALITY",NULL,NULL +"129.42",129,"KUMANOVO_MUNICIPALITY",NULL,NULL +"129.43",129,"LIPKOVO_MUNICIPALITY",NULL,NULL +"129.44",129,"LOZOVO_MUNICIPALITY",NULL,NULL +"129.45",129,"MAKEDONSKA_KAMENICA_MUNICIPALITY",NULL,NULL +"129.46",129,"MAKEDONSKI_BROD_MUNICIPALITY",NULL,NULL +"129.47",129,"MAVROVO_AND_ROSTUSA_MUNICIPALITY",NULL,NULL +"129.48",129,"MOGILA_MUNICIPALITY",NULL,NULL +"129.49",129,"NEGOTINO_MUNICIPALITY",NULL,NULL +"129.5",129,"BOGDANCI_MUNICIPALITY",NULL,NULL +"129.50",129,"NOVACI_MUNICIPALITY",NULL,NULL +"129.51",129,"NOVO_SELO_MUNICIPALITY",NULL,NULL +"129.52",129,"OHRID_MUNICIPALITY",NULL,NULL +"129.53",129,"OSLOMEJ_MUNICIPALITY",NULL,NULL +"129.54",129,"PEHCEVO_MUNICIPALITY",NULL,NULL +"129.55",129,"PETROVEC_MUNICIPALITY",NULL,NULL +"129.56",129,"PLASNICA_MUNICIPALITY",NULL,NULL +"129.57",129,"PRILEP_MUNICIPALITY",NULL,NULL +"129.58",129,"PROBISTIP_MUNICIPALITY",NULL,NULL +"129.59",129,"RADOVIS_MUNICIPALITY",NULL,NULL +"129.6",129,"BOGOVINJE_MUNICIPALITY",NULL,NULL +"129.60",129,"RANKOVCE_MUNICIPALITY",NULL,NULL +"129.61",129,"RESEN_MUNICIPALITY",NULL,NULL +"129.62",129,"ROSOMAN_MUNICIPALITY",NULL,NULL +"129.63",129,"SARAJ_MUNICIPALITY",NULL,NULL +"129.64",129,"SOPISTE_MUNICIPALITY",NULL,NULL +"129.65",129,"STARO_NAGORICANE_MUNICIPALITY",NULL,NULL +"129.66",129,"STIP_MUNICIPALITY",NULL,NULL +"129.67",129,"STRUGA_MUNICIPALITY",NULL,NULL +"129.68",129,"STRUMICA_MUNICIPALITY",NULL,NULL +"129.69",129,"STUDENICANI_MUNICIPALITY",NULL,NULL +"129.7",129,"BOSILOVO_MUNICIPALITY",NULL,NULL +"129.70",129,"SUTO_ORIZARI_MUNICIPALITY",NULL,NULL +"129.71",129,"SVETI_NIKOLE_MUNICIPALITY",NULL,NULL +"129.72",129,"TEARCE_MUNICIPALITY",NULL,NULL +"129.73",129,"TETOVO_MUNICIPALITY",NULL,NULL +"129.74",129,"VALANDOVO_MUNICIPALITY",NULL,NULL +"129.75",129,"VASILEVO_MUNICIPALITY",NULL,NULL +"129.76",129,"VELES_MUNICIPALITY",NULL,NULL +"129.77",129,"VEVCANI_MUNICIPALITY",NULL,NULL +"129.78",129,"VINICA_MUNICIPALITY",NULL,NULL +"129.79",129,"VRANESTICA_MUNICIPALITY",NULL,NULL +"129.8",129,"BRVENICA_MUNICIPALITY",NULL,NULL +"129.80",129,"VRAPCISTE_MUNICIPALITY",NULL,NULL +"129.81",129,"ZAJAS_MUNICIPALITY",NULL,NULL +"129.82",129,"ZELENIKOVO_MUNICIPALITY",NULL,NULL +"129.83",129,"ZELINO_MUNICIPALITY",NULL,NULL +"129.84",129,"ZRNOVCI_MUNICIPALITY",NULL,NULL +"129.9",129,"BUTEL_MUNICIPALITY",NULL,NULL +"1.3",1,"BAGHLAN","BGL",NULL +"1.30",1,"SAR-E_POL","SAR",NULL +"130.1",130,"ANTANANARIVO_PROVINCE","T",NULL +"130.2",130,"ANTSIRANANA_PROVINCE","D",NULL +"130.3",130,"FIANARANTSOA_PROVINCE","F",NULL +"130.4",130,"MAHAJANGA_PROVINCE","M",NULL +"130.5",130,"TOAMASINA_PROVINCE","A",NULL +"130.6",130,"TOLIARA_PROVINCE","U",NULL +"1.31",1,"TAKHAR","TAK",NULL +"131.1",131,"BALAKA_DISTRICT","BA",NULL +"131.10",131,"KASUNGU_DISTRICT","KS",NULL +"131.11",131,"LIKOMA_DISTRICT","LK",NULL +"131.12",131,"LILONGWE_DISTRICT","LI",NULL +"131.13",131,"MACHINGA_DISTRICT","MH",NULL +"131.14",131,"MANGOCHI_DISTRICT","MG",NULL +"131.15",131,"MCHINJI_DISTRICT","MC",NULL +"131.16",131,"MULANJE_DISTRICT","MU",NULL +"131.17",131,"MWANZA_DISTRICT","MW",NULL +"131.18",131,"MZIMBA_DISTRICT","MZ",NULL +"131.19",131,"NKHATA_BAY_DISTRICT","NB",NULL +"131.2",131,"BLANTYRE_DISTRICT","BL",NULL +"131.20",131,"NKHOTAKOTA_DISTRICT","NK",NULL +"131.21",131,"NORTHERN_REGION","N",NULL +"131.22",131,"NSANJE_DISTRICT","NS",NULL +"131.23",131,"NTCHEU_DISTRICT","NU",NULL +"131.24",131,"NTCHISI_DISTRICT","NI",NULL +"131.25",131,"PHALOMBE_DISTRICT","PH",NULL +"131.26",131,"RUMPHI_DISTRICT","RU",NULL +"131.27",131,"SALIMA_DISTRICT","SA",NULL +"131.28",131,"SOUTHERN_REGION","S",NULL +"131.29",131,"THYOLO_DISTRICT","TH",NULL +"131.3",131,"CENTRAL_REGION","C",NULL +"131.30",131,"ZOMBA_DISTRICT","ZO",NULL +"131.4",131,"CHIKWAWA_DISTRICT","CK",NULL +"131.5",131,"CHIRADZULU_DISTRICT","CR",NULL +"131.6",131,"CHITIPA_DISTRICT","CT",NULL +"131.7",131,"DEDZA_DISTRICT","DE",NULL +"131.8",131,"DOWA_DISTRICT","DO",NULL +"131.9",131,"KARONGA_DISTRICT","KR",NULL +"1.32",1,"UROZGAN","URU",NULL +"132.1",132,"JOHOR",NULL,NULL +"132.10",132,"PERAK",NULL,NULL +"132.11",132,"PERLIS",NULL,NULL +"132.12",132,"PUTRAJAYA",NULL,NULL +"132.13",132,"SABAH",NULL,NULL +"132.14",132,"SARAWAK",NULL,NULL +"132.15",132,"SELANGOR",NULL,NULL +"132.16",132,"TERENGGANU",NULL,NULL +"132.2",132,"KEDAH",NULL,NULL +"132.3",132,"KELANTAN",NULL,NULL +"132.4",132,"KUALA_LUMPUR",NULL,NULL +"132.5",132,"LABUAN",NULL,NULL +"132.6",132,"MALACCA",NULL,NULL +"132.7",132,"NEGERI_SEMBILAN",NULL,NULL +"132.8",132,"PAHANG",NULL,NULL +"132.9",132,"PENANG",NULL,NULL +"1.33",1,"ZABUL","ZAB",NULL +"133.1",133,"ADDU_ATOLL",NULL,NULL +"133.10",133,"HAA_ALIF_ATOLL",NULL,NULL +"133.11",133,"HAA_DHAALU_ATOLL",NULL,NULL +"133.12",133,"KAAFU_ATOLL",NULL,NULL +"133.13",133,"LAAMU_ATOLL",NULL,NULL +"133.14",133,"LHAVIYANI_ATOLL",NULL,NULL +"133.15",133,"MALE","MLE",NULL +"133.16",133,"MEEMU_ATOLL",NULL,NULL +"133.17",133,"NOONU_ATOLL",NULL,NULL +"133.18",133,"NORTH_CENTRAL_PROVINCE","NC",NULL +"133.19",133,"NORTH_PROVINCE","NO",NULL +"133.2",133,"ALIF_ALIF_ATOLL",NULL,NULL +"133.20",133,"RAA_ATOLL",NULL,NULL +"133.21",133,"SHAVIYANI_ATOLL",NULL,NULL +"133.22",133,"SOUTH_CENTRAL_PROVINCE","SC",NULL +"133.23",133,"SOUTH_PROVINCE","SU",NULL +"133.24",133,"THAA_ATOLL",NULL,NULL +"133.25",133,"UPPER_SOUTH_PROVINCE","US",NULL +"133.26",133,"VAAVU_ATOLL",NULL,NULL +"133.3",133,"ALIF_DHAAL_ATOLL",NULL,NULL +"133.4",133,"CENTRAL_PROVINCE","CE",NULL +"133.5",133,"DHAALU_ATOLL",NULL,NULL +"133.6",133,"FAAFU_ATOLL",NULL,NULL +"133.7",133,"GAAFU_ALIF_ATOLL",NULL,NULL +"133.8",133,"GAAFU_DHAALU_ATOLL",NULL,NULL +"133.9",133,"GNAVIYANI_ATOLL",NULL,NULL +"134.1",134,"BAMAKO","BKO",NULL +"134.10",134,"TAOUDENIT_REGION",NULL,NULL +"134.11",134,"TOMBOUCTOU_REGION",NULL,NULL +"134.2",134,"GAO_REGION",NULL,NULL +"134.3",134,"KAYES_REGION",NULL,NULL +"134.4",134,"KIDAL_REGION",NULL,NULL +"134.5",134,"KOULIKORO_REGION",NULL,NULL +"134.6",134,"MENAKA_REGION",NULL,NULL +"134.7",134,"MOPTI_REGION",NULL,NULL +"134.8",134,"SEGOU_REGION",NULL,NULL +"134.9",134,"SIKASSO_REGION",NULL,NULL +"135.1",135,"ATTARD",NULL,NULL +"135.10",135,"FONTANA",NULL,NULL +"135.11",135,"GHAJNSIELEM",NULL,NULL +"135.12",135,"GHARB",NULL,NULL +"135.13",135,"GHARGHUR",NULL,NULL +"135.14",135,"GHASRI",NULL,NULL +"135.15",135,"GHAXAQ",NULL,NULL +"135.16",135,"GUDJA",NULL,NULL +"135.17",135,"GZIRA",NULL,NULL +"135.18",135,"HAMRUN",NULL,NULL +"135.19",135,"IKLIN",NULL,NULL +"135.2",135,"BALZAN",NULL,NULL +"135.20",135,"KALKARA",NULL,NULL +"135.21",135,"KERCEM",NULL,NULL +"135.22",135,"KIRKOP",NULL,NULL +"135.23",135,"LIJA",NULL,NULL +"135.24",135,"LUQA",NULL,NULL +"135.25",135,"MARSA",NULL,NULL +"135.26",135,"MARSASKALA",NULL,NULL +"135.27",135,"MARSAXLOKK",NULL,NULL +"135.28",135,"MDINA",NULL,NULL +"135.29",135,"MELLIEHA",NULL,NULL +"135.3",135,"BIRGU",NULL,NULL +"135.30",135,"MGARR",NULL,NULL +"135.31",135,"MOSTA",NULL,NULL +"135.32",135,"MQABBA",NULL,NULL +"135.33",135,"MSIDA",NULL,NULL +"135.34",135,"MTARFA",NULL,NULL +"135.35",135,"MUNXAR",NULL,NULL +"135.36",135,"NADUR",NULL,NULL +"135.37",135,"NAXXAR",NULL,NULL +"135.38",135,"PAOLA",NULL,NULL +"135.39",135,"PEMBROKE",NULL,NULL +"135.4",135,"BIRKIRKARA",NULL,NULL +"135.40",135,"PIETA",NULL,NULL +"135.41",135,"QALA",NULL,NULL +"135.42",135,"QORMI",NULL,NULL +"135.43",135,"QRENDI",NULL,NULL +"135.44",135,"RABAT",NULL,NULL +"135.45",135,"SAINT_LAWRENCE",NULL,NULL +"135.46",135,"SAN_GWANN",NULL,NULL +"135.47",135,"SANNAT",NULL,NULL +"135.48",135,"SANTA_LUCIJA",NULL,NULL +"135.49",135,"SANTA_VENERA",NULL,NULL +"135.5",135,"BIRZEBBUGA",NULL,NULL +"135.50",135,"SENGLEA",NULL,NULL +"135.51",135,"SIGGIEWI",NULL,NULL +"135.52",135,"SLIEMA",NULL,NULL +"135.53",135,"ST_JULIAN'S",NULL,NULL +"135.54",135,"ST_PAUL'S_BAY",NULL,NULL +"135.55",135,"SWIEQI",NULL,NULL +"135.56",135,"TA'_XBIEX",NULL,NULL +"135.57",135,"TARXIEN",NULL,NULL +"135.58",135,"VALLETTA",NULL,NULL +"135.59",135,"VICTORIA",NULL,NULL +"135.6",135,"COSPICUA",NULL,NULL +"135.60",135,"XAGHRA",NULL,NULL +"135.61",135,"XEWKIJA",NULL,NULL +"135.62",135,"XGHAJRA",NULL,NULL +"135.63",135,"ZABBAR",NULL,NULL +"135.64",135,"ZEBBUG_GOZO",NULL,NULL +"135.65",135,"ZEBBUG_MALTA",NULL,NULL +"135.66",135,"ZEJTUN",NULL,NULL +"135.67",135,"ZURRIEQ",NULL,NULL +"135.7",135,"DINGLI",NULL,NULL +"135.8",135,"FGURA",NULL,NULL +"135.9",135,"FLORIANA",NULL,NULL +"137.1",137,"RALIK_CHAIN","L",NULL +"137.2",137,"RATAK_CHAIN","T",NULL +"139.1",139,"ADRAR",NULL,NULL +"139.10",139,"NOUAKCHOTT-NORD",NULL,NULL +"139.11",139,"NOUAKCHOTT-OUEST",NULL,NULL +"139.12",139,"NOUAKCHOTT-SUD",NULL,NULL +"139.13",139,"TAGANT",NULL,NULL +"139.14",139,"TIRIS_ZEMMOUR",NULL,NULL +"139.15",139,"TRARZA",NULL,NULL +"139.2",139,"ASSABA",NULL,NULL +"139.3",139,"BRAKNA",NULL,NULL +"139.4",139,"DAKHLET_NOUADHIBOU",NULL,NULL +"139.5",139,"GORGOL",NULL,NULL +"139.6",139,"GUIDIMAKA",NULL,NULL +"139.7",139,"HODH_ECH_CHARGUI",NULL,NULL +"139.8",139,"HODH_EL_GHARBI",NULL,NULL +"139.9",139,"INCHIRI",NULL,NULL +"1.4",1,"BALKH","BAL",NULL +"140.1",140,"AGALEGA_ISLANDS","AG",NULL +"140.10",140,"RODRIGUES_ISLAND","RO",NULL +"140.11",140,"SAINT_BRANDON_ISLANDS","CC",NULL +"140.12",140,"SAVANNE","SA",NULL +"140.2",140,"BLACK_RIVER","BL",NULL +"140.3",140,"FLACQ","FL",NULL +"140.4",140,"GRAND_PORT","GP",NULL +"140.5",140,"MOKA","MO",NULL +"140.6",140,"PAMPLEMOUSSES","PA",NULL +"140.7",140,"PLAINES_WILHEMS","PW",NULL +"140.8",140,"PORT_LOUIS","PL",NULL +"140.9",140,"RIVIERE_DU_REMPART","RR",NULL +"14.1",14,"AUSTRALIAN_CAPITAL_TERRITORY","ACT",NULL +"14.2",14,"NEW_SOUTH_WALES","NSW",NULL +"142.1",142,"AGUASCALIENTES","AGU",NULL +"142.10",142,"DURANGO","DUR",NULL +"142.11",142,"ESTADO_DE_MEXICO","MEX",NULL +"142.12",142,"GUANAJUATO","GUA",NULL +"142.13",142,"GUERRERO","GRO",NULL +"142.14",142,"HIDALGO","HID",NULL +"142.15",142,"JALISCO","JAL",NULL +"142.16",142,"MICHOACAN_DE_OCAMPO","MIC",NULL +"142.17",142,"MORELOS","MOR",NULL +"142.18",142,"NAYARIT","NAY",NULL +"142.19",142,"NUEVO_LEON","NLE",NULL +"142.2",142,"BAJA_CALIFORNIA","BCN",NULL +"142.20",142,"OAXACA","OAX",NULL +"142.21",142,"PUEBLA","PUE",NULL +"142.22",142,"QUERETARO","QUE",NULL +"142.23",142,"QUINTANA_ROO","ROO",NULL +"142.24",142,"SAN_LUIS_POTOSI","SLP",NULL +"142.25",142,"SINALOA","SIN",NULL +"142.26",142,"SONORA","SON",NULL +"142.27",142,"TABASCO","TAB",NULL +"142.28",142,"TAMAULIPAS","TAM",NULL +"142.29",142,"TLAXCALA","TLA",NULL +"142.3",142,"BAJA_CALIFORNIA_SUR","BCS",NULL +"142.30",142,"VERACRUZ_DE_IGNACIO_DE_LA_LLAVE","VER",NULL +"142.31",142,"YUCATAN","YUC",NULL +"142.32",142,"ZACATECAS","ZAC",NULL +"142.4",142,"CAMPECHE","CAM",NULL +"142.5",142,"CHIAPAS","CHP",NULL +"142.6",142,"CHIHUAHUA","CHH",NULL +"142.7",142,"CIUDAD_DE_MEXICO","CDMX",NULL +"142.8",142,"COAHUILA_DE_ZARAGOZA","COA",NULL +"142.9",142,"COLIMA","COL",NULL +"14.3",14,"NORTHERN_TERRITORY","NT",NULL +"143.1",143,"CHUUK_STATE","TRK",NULL +"143.2",143,"KOSRAE_STATE","KSA",NULL +"143.3",143,"POHNPEI_STATE","PNI",NULL +"143.4",143,"YAP_STATE","YAP",NULL +"14.4",14,"QUEENSLAND","QLD",NULL +"144.1",144,"ANENII_NOI_DISTRICT","AN",NULL +"144.10",144,"CHISINAU_MUNICIPALITY","CU",NULL +"144.11",144,"CIMISLIA_DISTRICT","CM",NULL +"144.12",144,"CRIULENI_DISTRICT","CR",NULL +"144.13",144,"DONDUSENI_DISTRICT","DO",NULL +"144.14",144,"DROCHIA_DISTRICT","DR",NULL +"144.15",144,"DUBASARI_DISTRICT","DU",NULL +"144.16",144,"EDINET_DISTRICT","ED",NULL +"144.17",144,"FALESTI_DISTRICT","FA",NULL +"144.18",144,"FLORESTI_DISTRICT","FL",NULL +"144.19",144,"GAGAUZIA","GA",NULL +"144.2",144,"BALTI_MUNICIPALITY","BA",NULL +"144.20",144,"GLODENI_DISTRICT","GL",NULL +"144.21",144,"HINCESTI_DISTRICT","HI",NULL +"144.22",144,"IALOVENI_DISTRICT","IA",NULL +"144.23",144,"NISPORENI_DISTRICT","NI",NULL +"144.24",144,"OCNITA_DISTRICT","OC",NULL +"144.25",144,"ORHEI_DISTRICT","OR",NULL +"144.26",144,"REZINA_DISTRICT","RE",NULL +"144.27",144,"RISCANI_DISTRICT","RI",NULL +"144.28",144,"SINGEREI_DISTRICT","SI",NULL +"144.29",144,"SOLDANESTI_DISTRICT","SD",NULL +"144.3",144,"BASARABEASCA_DISTRICT","BS",NULL +"144.30",144,"SOROCA_DISTRICT","SO",NULL +"144.31",144,"STEFAN_VODA_DISTRICT","SV",NULL +"144.32",144,"STRASENI_DISTRICT","ST",NULL +"144.33",144,"TARACLIA_DISTRICT","TA",NULL +"144.34",144,"TELENESTI_DISTRICT","TE",NULL +"144.35",144,"TRANSNISTRIA_AUTONOMOUS_TERRITORIAL_UNIT","SN",NULL +"144.36",144,"UNGHENI_DISTRICT","UN",NULL +"144.4",144,"BENDER_MUNICIPALITY","BD",NULL +"144.5",144,"BRICENI_DISTRICT","BR",NULL +"144.6",144,"CAHUL_DISTRICT","CA",NULL +"144.7",144,"CALARASI_DISTRICT","CL",NULL +"144.8",144,"CANTEMIR_DISTRICT","CT",NULL +"144.9",144,"CAUSENI_DISTRICT","CS",NULL +"14.5",14,"SOUTH_AUSTRALIA","SA",NULL +"145.1",145,"LA_COLLE","CL",NULL +"145.2",145,"LA_CONDAMINE","CO",NULL +"145.3",145,"MONEGHETTI","MG",NULL +"14.6",14,"TASMANIA","TAS",NULL +"146.1",146,"ARKHANGAI_PROVINCE",NULL,NULL +"146.10",146,"GOVISUMBER_PROVINCE",NULL,NULL +"146.11",146,"KHENTII_PROVINCE",NULL,NULL +"146.12",146,"KHOVD_PROVINCE",NULL,NULL +"146.13",146,"KHOVSGOL_PROVINCE",NULL,NULL +"146.14",146,"OMNOGOVI_PROVINCE",NULL,NULL +"146.15",146,"ORKHON_PROVINCE",NULL,NULL +"146.16",146,"OVORKHANGAI_PROVINCE",NULL,NULL +"146.17",146,"SELENGE_PROVINCE",NULL,NULL +"146.18",146,"SUKHBAATAR_PROVINCE",NULL,NULL +"146.19",146,"TOV_PROVINCE",NULL,NULL +"146.2",146,"BAYAN-OLGII_PROVINCE",NULL,NULL +"146.20",146,"UVS_PROVINCE",NULL,NULL +"146.21",146,"ZAVKHAN_PROVINCE",NULL,NULL +"146.3",146,"BAYANKHONGOR_PROVINCE",NULL,NULL +"146.4",146,"BULGAN_PROVINCE",NULL,NULL +"146.5",146,"DARKHAN-UUL_PROVINCE",NULL,NULL +"146.6",146,"DORNOD_PROVINCE",NULL,NULL +"146.7",146,"DORNOGOVI_PROVINCE",NULL,NULL +"146.8",146,"DUNDGOVI_PROVINCE",NULL,NULL +"146.9",146,"GOVI-ALTAI_PROVINCE",NULL,NULL +"14.7",14,"VICTORIA","VIC",NULL +"147.1",147,"ANDRIJEVICA_MUNICIPALITY",NULL,NULL +"147.10",147,"MOJKOVAC_MUNICIPALITY",NULL,NULL +"147.11",147,"NIKSIC_MUNICIPALITY",NULL,NULL +"147.12",147,"OLD_ROYAL_CAPITAL_CETINJE",NULL,NULL +"147.13",147,"PETNJICA_MUNICIPALITY",NULL,NULL +"147.14",147,"PLAV_MUNICIPALITY",NULL,NULL +"147.15",147,"PLJEVLJA_MUNICIPALITY",NULL,NULL +"147.16",147,"PLUZINE_MUNICIPALITY",NULL,NULL +"147.17",147,"PODGORICA_MUNICIPALITY",NULL,NULL +"147.18",147,"ROZAJE_MUNICIPALITY",NULL,NULL +"147.19",147,"SAVNIK_MUNICIPALITY",NULL,NULL +"147.2",147,"BAR_MUNICIPALITY",NULL,NULL +"147.20",147,"TIVAT_MUNICIPALITY",NULL,NULL +"147.21",147,"ULCINJ_MUNICIPALITY",NULL,NULL +"147.22",147,"ZABLJAK_MUNICIPALITY",NULL,NULL +"147.3",147,"BERANE_MUNICIPALITY",NULL,NULL +"147.4",147,"BIJELO_POLJE_MUNICIPALITY",NULL,NULL +"147.5",147,"BUDVA_MUNICIPALITY",NULL,NULL +"147.6",147,"DANILOVGRAD_MUNICIPALITY",NULL,NULL +"147.7",147,"GUSINJE_MUNICIPALITY",NULL,NULL +"147.8",147,"KOLASIN_MUNICIPALITY",NULL,NULL +"147.9",147,"KOTOR_MUNICIPALITY",NULL,NULL +"14.8",14,"WESTERN_AUSTRALIA","WA",NULL +"149.1",149,"AGADIR-IDA-OU-TANANE","AGD",NULL +"149.10",149,"BERKANE","BER",NULL +"149.11",149,"BERRECHID","BRR",NULL +"149.12",149,"BOUJDOUR_(EH)","BOD",NULL +"149.13",149,"BOULEMANE","BOM",NULL +"149.14",149,"CASABLANCA","CAS",NULL +"149.15",149,"CASABLANCA-SETTAT",NULL,NULL +"149.16",149,"CHEFCHAOUEN","CHE",NULL +"149.17",149,"CHICHAOUA","CHI",NULL +"149.18",149,"CHTOUKA-AIT_BAHA","CHT",NULL +"149.19",149,"DAKHLA-OUED_ED-DAHAB_(EH)",NULL,NULL +"149.2",149,"AL_HAOUZ","HAO",NULL +"149.20",149,"DRAA-TAFILALET",NULL,NULL +"149.21",149,"DRIOUCH","DRI",NULL +"149.22",149,"EL_HAJEB","HAJ",NULL +"149.23",149,"EL_JADIDA","JDI",NULL +"149.24",149,"EL_KELAA_DES_SRAGHNA","KES",NULL +"149.25",149,"ERRACHIDIA","ERR",NULL +"149.26",149,"ES-SEMARA_(EH-PARTIAL)","ESM",NULL +"149.27",149,"ESSAOUIRA","ESI",NULL +"149.28",149,"FAHS-ANJRA","FAH",NULL +"149.29",149,"FES","FES",NULL +"149.3",149,"AL_HOCEIMA","HOC",NULL +"149.30",149,"FES-MEKNES",NULL,NULL +"149.31",149,"FIGUIG","FIG",NULL +"149.32",149,"FQUIH_BEN_SALAH","FQH",NULL +"149.33",149,"GUELMIM","GUE",NULL +"149.34",149,"GUELMIM-OUED_NOUN_(EH-PARTIAL)",NULL,NULL +"149.35",149,"GUERCIF","GUF",NULL +"149.36",149,"IFRANE","IFR",NULL +"149.37",149,"INEZGANE-AIT_MELLOUL","INE",NULL +"149.38",149,"JERADA","JRA",NULL +"149.39",149,"KENITRA","KEN",NULL +"149.4",149,"AOUSSERD_(EH)","AOU",NULL +"149.40",149,"KHEMISSET","KHE",NULL +"149.41",149,"KHENIFRA","KHN",NULL +"149.42",149,"KHOURIBGA","KHO",NULL +"149.43",149,"L'ORIENTAL",NULL,NULL +"149.44",149,"LAAYOUNE_(EH)","LAA",NULL +"149.45",149,"LAAYOUNE-SAKIA_EL_HAMRA_(EH-PARTIAL)",NULL,NULL +"149.46",149,"LARACHE","LAR",NULL +"149.47",149,"M'DIQ-FNIDEQ","MDF",NULL +"149.48",149,"MARRAKECH","MAR",NULL +"149.49",149,"MARRAKESH-SAFI",NULL,NULL +"149.5",149,"ASSA-ZAG_(EH-PARTIAL)","ASZ",NULL +"149.50",149,"MEDIOUNA","MED",NULL +"149.51",149,"MEKNES","MEK",NULL +"149.52",149,"MIDELT","MID",NULL +"149.53",149,"MOHAMMADIA","MOH",NULL +"149.54",149,"MOULAY_YACOUB","MOU",NULL +"149.55",149,"NADOR","NAD",NULL +"149.56",149,"NOUACEUR","NOU",NULL +"149.57",149,"OUARZAZATE","OUA",NULL +"149.58",149,"OUED_ED-DAHAB_(EH)","OUD",NULL +"149.59",149,"OUEZZANE","OUZ",NULL +"149.6",149,"AZILAL","AZI",NULL +"149.60",149,"OUJDA-ANGAD","OUJ",NULL +"149.61",149,"RABAT","RAB",NULL +"149.62",149,"RABAT-SALE-KENITRA",NULL,NULL +"149.63",149,"REHAMNA","REH",NULL +"149.64",149,"SAFI","SAF",NULL +"149.65",149,"SALE","SAL",NULL +"149.66",149,"SEFROU","SEF",NULL +"149.67",149,"SETTAT","SET",NULL +"149.68",149,"SIDI_BENNOUR","SIB",NULL +"149.69",149,"SIDI_IFNI","SIF",NULL +"149.7",149,"BENI_MELLAL","BEM",NULL +"149.70",149,"SIDI_KACEM","SIK",NULL +"149.71",149,"SIDI_SLIMANE","SIL",NULL +"149.72",149,"SKHIRATE-TEMARA","SKH",NULL +"149.73",149,"SOUSS-MASSA",NULL,NULL +"149.74",149,"TAN-TAN_(EH-PARTIAL)","TNT",NULL +"149.75",149,"TANGER-ASSILAH","TNG",NULL +"149.76",149,"TANGER-TETOUAN-AL_HOCEIMA",NULL,NULL +"149.77",149,"TAOUNATE","TAO",NULL +"149.78",149,"TAOURIRT","TAI",NULL +"149.79",149,"TARFAYA_(EH-PARTIAL)","TAF",NULL +"149.8",149,"BENI_MELLAL-KHENIFRA",NULL,NULL +"149.80",149,"TAROUDANNT","TAR",NULL +"149.81",149,"TATA","TAT",NULL +"149.82",149,"TAZA","TAZ",NULL +"149.83",149,"TETOUAN","TET",NULL +"149.84",149,"TINGHIR","TIN",NULL +"149.85",149,"TIZNIT","TIZ",NULL +"149.86",149,"YOUSSOUFIA","YUS",NULL +"149.87",149,"ZAGORA","ZAG",NULL +"149.9",149,"BENSLIMANE","BES",NULL +"1.5",1,"BAMYAN","BAM",NULL +"150.1",150,"CABO_DELGADO_PROVINCE","P",NULL +"150.10",150,"TETE_PROVINCE","T",NULL +"150.11",150,"ZAMBEZIA_PROVINCE","Q",NULL +"150.2",150,"GAZA_PROVINCE","G",NULL +"150.3",150,"INHAMBANE_PROVINCE","I",NULL +"150.4",150,"MANICA_PROVINCE","B",NULL +"150.5",150,"MAPUTO","MPM",NULL +"150.6",150,"MAPUTO_PROVINCE","L",NULL +"150.7",150,"NAMPULA_PROVINCE","N",NULL +"150.8",150,"NIASSA_PROVINCE","A",NULL +"150.9",150,"SOFALA_PROVINCE","S",NULL +"15.1",15,"BURGENLAND",NULL,NULL +"151.1",151,"AYEYARWADY_REGION",NULL,NULL +"151.10",151,"NAYPYIDAW_UNION_TERRITORY",NULL,NULL +"151.11",151,"RAKHINE_STATE",NULL,NULL +"151.12",151,"SAGAING_REGION",NULL,NULL +"151.13",151,"SHAN_STATE",NULL,NULL +"151.14",151,"TANINTHARYI_REGION",NULL,NULL +"151.15",151,"YANGON_REGION",NULL,NULL +"151.2",151,"BAGO",NULL,NULL +"151.3",151,"CHIN_STATE",NULL,NULL +"151.4",151,"KACHIN_STATE",NULL,NULL +"151.5",151,"KAYAH_STATE",NULL,NULL +"151.6",151,"KAYIN_STATE",NULL,NULL +"151.7",151,"MAGWAY_REGION",NULL,NULL +"151.8",151,"MANDALAY_REGION",NULL,NULL +"151.9",151,"MON_STATE",NULL,NULL +"15.2",15,"CARINTHIA",NULL,NULL +"152.1",152,"ERONGO_REGION","ER",NULL +"152.10",152,"OMUSATI_REGION","OS",NULL +"152.11",152,"OSHANA_REGION","ON",NULL +"152.12",152,"OSHIKOTO_REGION","OT",NULL +"152.13",152,"OTJOZONDJUPA_REGION","OD",NULL +"152.14",152,"ZAMBEZI_REGION","CA",NULL +"152.2",152,"HARDAP_REGION","HA",NULL +"152.3",152,"KARAS_REGION","KA",NULL +"152.4",152,"KAVANGO_EAST_REGION","KE",NULL +"152.5",152,"KAVANGO_WEST_REGION","KW",NULL +"152.6",152,"KHOMAS_REGION","KH",NULL +"152.7",152,"KUNENE_REGION","KU",NULL +"152.8",152,"OHANGWENA_REGION","OW",NULL +"152.9",152,"OMAHEKE_REGION","OH",NULL +"15.3",15,"LOWER_AUSTRIA",NULL,NULL +"153.1",153,"AIWO_DISTRICT",NULL,NULL +"153.10",153,"IJUW_DISTRICT",NULL,NULL +"153.11",153,"MENENG_DISTRICT",NULL,NULL +"153.12",153,"NIBOK_DISTRICT",NULL,NULL +"153.13",153,"UABOE_DISTRICT",NULL,NULL +"153.14",153,"YAREN_DISTRICT",NULL,NULL +"153.2",153,"ANABAR_DISTRICT",NULL,NULL +"153.3",153,"ANETAN_DISTRICT",NULL,NULL +"153.4",153,"ANIBARE_DISTRICT",NULL,NULL +"153.5",153,"BAITI_DISTRICT",NULL,NULL +"153.6",153,"BOE_DISTRICT",NULL,NULL +"153.7",153,"BUADA_DISTRICT",NULL,NULL +"153.8",153,"DENIGOMODU_DISTRICT",NULL,NULL +"153.9",153,"EWA_DISTRICT",NULL,NULL +"15.4",15,"SALZBURG",NULL,NULL +"154.1",154,"BAGMATI_ZONE","BA",NULL +"154.10",154,"KOSI_ZONE","KO",NULL +"154.11",154,"LUMBINI_ZONE","LU",NULL +"154.12",154,"MAHAKALI_ZONE","MA",NULL +"154.13",154,"MECHI_ZONE","ME",NULL +"154.14",154,"MID-WESTERN_REGION",NULL,NULL +"154.15",154,"NARAYANI_ZONE",NULL,NULL +"154.16",154,"RAPTI_ZONE","RA",NULL +"154.17",154,"SAGARMATHA_ZONE","SA",NULL +"154.18",154,"SETI_ZONE","SE",NULL +"154.19",154,"WESTERN_REGION",NULL,NULL +"154.2",154,"BHERI_ZONE","BH",NULL +"154.3",154,"CENTRAL_REGION",NULL,NULL +"154.4",154,"DHAULAGIRI_ZONE","DH",NULL +"154.5",154,"EASTERN_DEVELOPMENT_REGION",NULL,NULL +"154.6",154,"FAR-WESTERN_DEVELOPMENT_REGION",NULL,NULL +"154.7",154,"GANDAKI_ZONE","GA",NULL +"154.8",154,"JANAKPUR_ZONE","JA",NULL +"154.9",154,"KARNALI_ZONE","KA",NULL +"15.5",15,"STYRIA",NULL,NULL +"155.1",155,"BONAIRE","BQ1",NULL +"155.2",155,"SABA","BQ2",NULL +"155.3",155,"SINT_EUSTATIUS","BQ3",NULL +"15.6",15,"TYROL",NULL,NULL +"156.1",156,"BONAIRE","BQ1",NULL +"156.10",156,"OVERIJSSEL","OV",NULL +"156.11",156,"SABA","BQ2",NULL +"156.12",156,"SINT_EUSTATIUS","BQ3",NULL +"156.13",156,"SOUTH_HOLLAND","ZH",NULL +"156.14",156,"UTRECHT","UT",NULL +"156.15",156,"ZEELAND","ZE",NULL +"156.2",156,"DRENTHE","DR",NULL +"156.3",156,"FLEVOLAND","FL",NULL +"156.4",156,"FRIESLAND","FR",NULL +"156.5",156,"GELDERLAND","GE",NULL +"156.6",156,"GRONINGEN","GR",NULL +"156.7",156,"LIMBURG","LI",NULL +"156.8",156,"NORTH_BRABANT","NB",NULL +"156.9",156,"NORTH_HOLLAND","NH",NULL +"15.7",15,"UPPER_AUSTRIA",NULL,NULL +"15.8",15,"VIENNA",NULL,NULL +"158.1",158,"AUCKLAND_REGION","AUK",NULL +"158.10",158,"NORTHLAND_REGION","NTL",NULL +"158.11",158,"OTAGO_REGION","OTA",NULL +"158.12",158,"SOUTHLAND_REGION","STL",NULL +"158.13",158,"TARANAKI_REGION","TKI",NULL +"158.14",158,"TASMAN_DISTRICT","TAS",NULL +"158.15",158,"WAIKATO_REGION","WKO",NULL +"158.16",158,"WELLINGTON_REGION","WGN",NULL +"158.17",158,"WEST_COAST_REGION","WTC",NULL +"158.2",158,"BAY_OF_PLENTY_REGION","BOP",NULL +"158.3",158,"CANTERBURY_REGION","CAN",NULL +"158.4",158,"CHATHAM_ISLANDS","CIT",NULL +"158.5",158,"GISBORNE_DISTRICT","GIS",NULL +"158.6",158,"HAWKE'S_BAY_REGION","HKB",NULL +"158.7",158,"MANAWATU-WANGANUI_REGION","MWT",NULL +"158.8",158,"MARLBOROUGH_REGION","MBH",NULL +"158.9",158,"NELSON_REGION","NSN",NULL +"15.9",15,"VORARLBERG",NULL,NULL +"159.1",159,"BOACO","BO",NULL +"159.10",159,"MANAGUA","MN",NULL +"159.11",159,"MASAYA","MS",NULL +"159.12",159,"MATAGALPA","MT",NULL +"159.13",159,"NORTH_CARIBBEAN_COAST","AN",NULL +"159.14",159,"NUEVA_SEGOVIA","NS",NULL +"159.15",159,"RIO_SAN_JUAN","SJ",NULL +"159.16",159,"RIVAS","RI",NULL +"159.17",159,"SOUTH_CARIBBEAN_COAST","AS",NULL +"159.2",159,"CARAZO","CA",NULL +"159.3",159,"CHINANDEGA","CI",NULL +"159.4",159,"CHONTALES","CO",NULL +"159.5",159,"ESTELI","ES",NULL +"159.6",159,"GRANADA","GR",NULL +"159.7",159,"JINOTEGA","JI",NULL +"159.8",159,"LEON","LE",NULL +"159.9",159,"MADRIZ","MD",NULL +"1.6",1,"DAYKUNDI","DAY",NULL +"160.1",160,"AGADEZ_REGION",NULL,NULL +"160.2",160,"DIFFA_REGION",NULL,NULL +"160.3",160,"DOSSO_REGION",NULL,NULL +"160.4",160,"MARADI_REGION",NULL,NULL +"160.5",160,"TAHOUA_REGION",NULL,NULL +"160.6",160,"TILLABERI_REGION",NULL,NULL +"160.7",160,"ZINDER_REGION",NULL,NULL +"16.1",16,"ABSHERON_DISTRICT","ABS",NULL +"16.10",16,"BALAKAN_DISTRICT","BAL",NULL +"16.11",16,"BARDA_DISTRICT","BAR",NULL +"161.1",161,"ABIA","AB",NULL +"161.10",161,"CROSS_RIVER","CR",NULL +"161.11",161,"DELTA","DE",NULL +"161.12",161,"EBONYI","EB",NULL +"161.13",161,"EDO","ED",NULL +"161.14",161,"EKITI","EK",NULL +"161.15",161,"ENUGU","EN",NULL +"161.16",161,"GOMBE","GO",NULL +"161.17",161,"IMO","IM",NULL +"161.18",161,"JIGAWA","JI",NULL +"161.19",161,"KADUNA","KD",NULL +"16.12",16,"BEYLAGAN_DISTRICT","BEY",NULL +"161.2",161,"ABUJA_FEDERAL_CAPITAL_TERRITORY","FC",NULL +"161.20",161,"KANO","KN",NULL +"161.21",161,"KATSINA","KT",NULL +"161.22",161,"KEBBI","KE",NULL +"161.23",161,"KOGI","KO",NULL +"161.24",161,"KWARA","KW",NULL +"161.25",161,"LAGOS","LA",NULL +"161.26",161,"NASARAWA",NULL,NULL +"161.27",161,"NIGER","NI",NULL +"161.28",161,"OGUN","OG",NULL +"161.29",161,"ONDO","ON",NULL +"16.13",16,"BILASUVAR_DISTRICT","BIL",NULL +"161.3",161,"ADAMAWA","AD",NULL +"161.30",161,"OSUN","OS",NULL +"161.31",161,"OYO","OY",NULL +"161.32",161,"PLATEAU","PL",NULL +"161.33",161,"RIVERS","RI",NULL +"161.34",161,"SOKOTO","SO",NULL +"161.35",161,"TARABA","TA",NULL +"161.36",161,"YOBE","YO",NULL +"161.37",161,"ZAMFARA","ZA",NULL +"16.14",16,"DASHKASAN_DISTRICT","DAS",NULL +"161.4",161,"AKWA_IBOM","AK",NULL +"16.15",16,"FIZULI_DISTRICT","FUZ",NULL +"161.5",161,"ANAMBRA","AN",NULL +"16.16",16,"GANJA","GA",NULL +"161.6",161,"BAUCHI","BA",NULL +"16.17",16,"GADABAY_DISTRICT","GAD",NULL +"161.7",161,"BAYELSA","BY",NULL +"16.18",16,"GOBUSTAN_DISTRICT","QOB",NULL +"161.8",161,"BENUE","BE",NULL +"16.19",16,"GORANBOY_DISTRICT","GOR",NULL +"161.9",161,"BORNO","BO",NULL +"16.2",16,"AGDAM_DISTRICT","AGM",NULL +"16.20",16,"GOYCHAY","GOY",NULL +"16.21",16,"GOYGOL_DISTRICT","GYG",NULL +"16.22",16,"HAJIGABUL_DISTRICT","HAC",NULL +"16.23",16,"IMISHLI_DISTRICT","IMI",NULL +"16.24",16,"ISMAILLI_DISTRICT","ISM",NULL +"16.25",16,"JABRAYIL_DISTRICT","CAB",NULL +"16.26",16,"JALILABAD_DISTRICT","CAL",NULL +"16.27",16,"JULFA_DISTRICT","CUL",NULL +"16.28",16,"KALBAJAR_DISTRICT","KAL",NULL +"16.29",16,"KANGARLI_DISTRICT","KAN",NULL +"16.3",16,"AGDASH_DISTRICT","AGS",NULL +"16.30",16,"KHACHMAZ_DISTRICT","XAC",NULL +"16.31",16,"KHIZI_DISTRICT","XIZ",NULL +"16.32",16,"KHOJALI_DISTRICT","XCI",NULL +"16.33",16,"KURDAMIR_DISTRICT","KUR",NULL +"16.34",16,"LACHIN_DISTRICT","LAC",NULL +"16.35",16,"LANKARAN","LAN",NULL +"16.36",16,"LANKARAN_DISTRICT","LA",NULL +"16.37",16,"LERIK_DISTRICT","LER",NULL +"16.38",16,"MARTUNI","XVD",NULL +"16.39",16,"MASALLY_DISTRICT","MAS",NULL +"16.4",16,"AGHJABADI_DISTRICT","AGC",NULL +"16.40",16,"MINGACHEVIR","MI",NULL +"16.41",16,"NAKHCHIVAN_AUTONOMOUS_REPUBLIC","NX",NULL +"16.42",16,"NEFTCHALA_DISTRICT","NEF",NULL +"16.43",16,"OGHUZ_DISTRICT","OGU",NULL +"16.44",16,"ORDUBAD_DISTRICT","ORD",NULL +"16.45",16,"QABALA_DISTRICT","QAB",NULL +"16.46",16,"QAKH_DISTRICT","QAX",NULL +"16.47",16,"QAZAKH_DISTRICT","QAZ",NULL +"16.48",16,"QUBA_DISTRICT","QBA",NULL +"16.49",16,"QUBADLI_DISTRICT","QBI",NULL +"16.5",16,"AGSTAFA_DISTRICT","AGA",NULL +"16.50",16,"QUSAR_DISTRICT","QUS",NULL +"16.51",16,"SAATLY_DISTRICT","SAT",NULL +"165.1",165,"AGDER",NULL,NULL +"165.10",165,"TRONDELAG",NULL,NULL +"165.11",165,"VESTFOLD_OG_TELEMARK",NULL,NULL +"165.12",165,"VESTLAND",NULL,NULL +"165.13",165,"VIKEN",NULL,NULL +"16.52",16,"SABIRABAD_DISTRICT","SAB",NULL +"165.2",165,"INNLANDET",NULL,NULL +"16.53",16,"SADARAK_DISTRICT","SAD",NULL +"165.3",165,"JAN_MAYEN",NULL,NULL +"16.54",16,"SALYAN_DISTRICT","SAL",NULL +"165.4",165,"MORE_OG_ROMSDAL",NULL,NULL +"16.55",16,"SAMUKH_DISTRICT","SMX",NULL +"165.5",165,"NORDLAND",NULL,NULL +"16.56",16,"SHABRAN_DISTRICT","SBN",NULL +"165.6",165,"OSLO",NULL,NULL +"16.57",16,"SHAHBUZ_DISTRICT","SAH",NULL +"165.7",165,"ROGALAND",NULL,NULL +"16.58",16,"SHAKI","SA",NULL +"165.8",165,"SVALBARD",NULL,NULL +"16.59",16,"SHAKI_DISTRICT","SAK",NULL +"165.9",165,"TROMS_OG_FINNMARK",NULL,NULL +"16.6",16,"AGSU_DISTRICT","AGU",NULL +"16.60",16,"SHAMAKHI_DISTRICT","SMI",NULL +"16.61",16,"SHAMKIR_DISTRICT","SKR",NULL +"166.1",166,"AD_DAKHILIYAH","DA",NULL +"166.10",166,"ASH_SHARQIYAH_SOUTH","SJ",NULL +"166.11",166,"DHOFAR","ZU",NULL +"166.12",166,"MUSANDAM","MU",NULL +"166.13",166,"MUSCAT","MA",NULL +"16.62",16,"SHARUR_DISTRICT","SAR",NULL +"166.2",166,"AD_DHAHIRAH","ZA",NULL +"16.63",16,"SHIRVAN","SR",NULL +"166.3",166,"AL_BATINAH_NORTH","BS",NULL +"16.64",16,"SHUSHA_DISTRICT","SUS",NULL +"166.4",166,"AL_BATINAH_REGION","BA",NULL +"16.65",16,"SIAZAN_DISTRICT","SIY",NULL +"166.5",166,"AL_BATINAH_SOUTH","BJ",NULL +"16.66",16,"SUMQAYIT","SM",NULL +"166.6",166,"AL_BURAIMI","BU",NULL +"16.67",16,"TARTAR_DISTRICT","TAR",NULL +"166.7",166,"AL_WUSTA","WU",NULL +"16.68",16,"TOVUZ_DISTRICT","TOV",NULL +"166.8",166,"ASH_SHARQIYAH_NORTH","SS",NULL +"16.69",16,"UJAR_DISTRICT","UCA",NULL +"166.9",166,"ASH_SHARQIYAH_REGION","SH",NULL +"16.7",16,"ASTARA_DISTRICT","AST",NULL +"16.70",16,"YARDYMLI_DISTRICT","YAR",NULL +"16.71",16,"YEVLAKH","YE",NULL +"167.1",167,"AZAD_KASHMIR","JK",NULL +"16.72",16,"YEVLAKH_DISTRICT","YEV",NULL +"167.2",167,"BALOCHISTAN","BA",NULL +"16.73",16,"ZANGILAN_DISTRICT","ZAN",NULL +"167.3",167,"FEDERALLY_ADMINISTERED_TRIBAL_AREAS","TA",NULL +"16.74",16,"ZAQATALA_DISTRICT","ZAQ",NULL +"167.4",167,"GILGIT-BALTISTAN","GB",NULL +"16.75",16,"ZARDAB_DISTRICT","ZAR",NULL +"167.5",167,"ISLAMABAD_CAPITAL_TERRITORY","IS",NULL +"167.6",167,"KHYBER_PAKHTUNKHWA","KP",NULL +"167.7",167,"PUNJAB","PB",NULL +"167.8",167,"SINDH","SD",NULL +"16.8",16,"BABEK_DISTRICT","BAB",NULL +"168.1",168,"AIMELIIK",NULL,NULL +"168.10",168,"NGARDMAU",NULL,NULL +"168.11",168,"NGATPANG",NULL,NULL +"168.12",168,"NGCHESAR",NULL,NULL +"168.13",168,"NGEREMLENGUI",NULL,NULL +"168.14",168,"NGIWAL",NULL,NULL +"168.15",168,"PELELIU",NULL,NULL +"168.16",168,"SONSOROL",NULL,NULL +"168.2",168,"AIRAI",NULL,NULL +"168.3",168,"ANGAUR",NULL,NULL +"168.4",168,"HATOHOBEI",NULL,NULL +"168.5",168,"KAYANGEL",NULL,NULL +"168.6",168,"KOROR",NULL,NULL +"168.7",168,"MELEKEOK",NULL,NULL +"168.8",168,"NGARAARD",NULL,NULL +"168.9",168,"NGARCHELONG",NULL,NULL +"16.9",16,"BAKU","BA",NULL +"169.1",169,"BETHLEHEM","BTH",NULL +"169.10",169,"NORTH_GAZA","NGZ",NULL +"169.11",169,"QALQILYA","QQA",NULL +"169.12",169,"RAFAH","RFH",NULL +"169.13",169,"RAMALLAH","RBH",NULL +"169.14",169,"SALFIT","SLT",NULL +"169.15",169,"TUBAS","TBS",NULL +"169.16",169,"TULKARM","TKM",NULL +"169.2",169,"DEIR_EL_BALAH","DEB",NULL +"169.3",169,"GAZA","GZA",NULL +"169.4",169,"HEBRON","HBN",NULL +"169.5",169,"JENIN","JEN",NULL +"169.6",169,"JERICHO_AND_AL_AGHWAR","JRH",NULL +"169.7",169,"JERUSALEM","JEM",NULL +"169.8",169,"KHAN_YUNIS","KYS",NULL +"169.9",169,"NABLUS","NBS",NULL +"1.7",1,"FARAH","FRA",NULL +"170.1",170,"BOCAS_DEL_TORO_PROVINCE",NULL,NULL +"170.10",170,"NGOBE-BUGLE_COMARCA","NB",NULL +"170.11",170,"PANAMA_OESTE_PROVINCE",NULL,NULL +"170.12",170,"PANAMA_PROVINCE",NULL,NULL +"170.13",170,"VERAGUAS_PROVINCE",NULL,NULL +"170.2",170,"CHIRIQUI_PROVINCE",NULL,NULL +"170.3",170,"COCLE_PROVINCE",NULL,NULL +"170.4",170,"COLON_PROVINCE",NULL,NULL +"170.5",170,"DARIEN_PROVINCE",NULL,NULL +"170.6",170,"EMBERA-WOUNAAN_COMARCA","EM",NULL +"170.7",170,"GUNA_YALA","KY",NULL +"170.8",170,"HERRERA_PROVINCE",NULL,NULL +"170.9",170,"LOS_SANTOS_PROVINCE",NULL,NULL +"17.1",17,"ACKLINS","AK",NULL +"17.10",17,"CROOKED_ISLAND","CK",NULL +"17.11",17,"EAST_GRAND_BAHAMA","EG",NULL +"171.1",171,"BOUGAINVILLE","NSB",NULL +"171.10",171,"MADANG_PROVINCE","MPM",NULL +"171.11",171,"MANUS_PROVINCE","MRL",NULL +"171.12",171,"MILNE_BAY_PROVINCE","MBA",NULL +"171.13",171,"MOROBE_PROVINCE","MPL",NULL +"171.14",171,"NEW_IRELAND_PROVINCE","NIK",NULL +"171.15",171,"ORO_PROVINCE","NPP",NULL +"171.16",171,"PORT_MORESBY","NCD",NULL +"171.17",171,"SANDAUN_PROVINCE","SAN",NULL +"171.18",171,"SOUTHERN_HIGHLANDS_PROVINCE","SHM",NULL +"171.19",171,"WEST_NEW_BRITAIN_PROVINCE","WBK",NULL +"17.12",17,"EXUMA","EX",NULL +"171.2",171,"CENTRAL_PROVINCE","CPM",NULL +"171.20",171,"WESTERN_HIGHLANDS_PROVINCE","WHM",NULL +"171.21",171,"WESTERN_PROVINCE","WPD",NULL +"17.13",17,"FREEPORT","FP",NULL +"171.3",171,"CHIMBU_PROVINCE","CPK",NULL +"17.14",17,"FRESH_CREEK","FC",NULL +"171.4",171,"EAST_NEW_BRITAIN","EBR",NULL +"17.15",17,"GOVERNOR'S_HARBOUR","GH",NULL +"171.5",171,"EASTERN_HIGHLANDS_PROVINCE","EHG",NULL +"17.16",17,"GRAND_CAY","GC",NULL +"171.6",171,"ENGA_PROVINCE","EPW",NULL +"17.17",17,"GREEN_TURTLE_CAY","GT",NULL +"171.7",171,"GULF","GPK",NULL +"17.18",17,"HARBOUR_ISLAND","HI",NULL +"171.8",171,"HELA","HLA",NULL +"17.19",17,"HIGH_ROCK","HR",NULL +"171.9",171,"JIWAKA_PROVINCE","JWK",NULL +"17.2",17,"ACKLINS_AND_CROOKED_ISLANDS","AC",NULL +"17.20",17,"HOPE_TOWN","HT",NULL +"17.21",17,"INAGUA","IN",NULL +"172.1",172,"ALTO_PARAGUAY_DEPARTMENT",NULL,NULL +"172.10",172,"CORDILLERA_DEPARTMENT",NULL,NULL +"172.11",172,"GUAIRA_DEPARTMENT",NULL,NULL +"172.12",172,"ITAPUA",NULL,NULL +"172.13",172,"MISIONES_DEPARTMENT",NULL,NULL +"172.14",172,"NEEMBUCU_DEPARTMENT",NULL,NULL +"172.15",172,"PARAGUARI_DEPARTMENT",NULL,NULL +"172.16",172,"PRESIDENTE_HAYES_DEPARTMENT",NULL,NULL +"172.17",172,"SAN_PEDRO_DEPARTMENT",NULL,NULL +"17.22",17,"KEMPS_BAY","KB",NULL +"172.2",172,"ALTO_PARANA_DEPARTMENT",NULL,NULL +"17.23",17,"LONG_ISLAND","LI",NULL +"172.3",172,"AMAMBAY_DEPARTMENT",NULL,NULL +"17.24",17,"MANGROVE_CAY","MC",NULL +"172.4",172,"BOQUERON_DEPARTMENT",NULL,NULL +"17.25",17,"MARSH_HARBOUR","MH",NULL +"172.5",172,"CAAGUAZU",NULL,NULL +"17.26",17,"MAYAGUANA_DISTRICT","MG",NULL +"172.6",172,"CAAZAPA",NULL,NULL +"17.27",17,"NEW_PROVIDENCE","NP",NULL +"172.7",172,"CANINDEYU",NULL,NULL +"17.28",17,"NICHOLLSTOWN_AND_BERRY_ISLANDS","NB",NULL +"172.8",172,"CENTRAL_DEPARTMENT",NULL,NULL +"17.29",17,"NORTH_ABACO","NO",NULL +"172.9",172,"CONCEPCION_DEPARTMENT",NULL,NULL +"17.3",17,"BERRY_ISLANDS","BY",NULL +"17.30",17,"NORTH_ANDROS","NS",NULL +"17.31",17,"NORTH_ELEUTHERA","NE",NULL +"173.1",173,"AMAZONAS","AMA",NULL +"173.10",173,"HUANUCO","HUC",NULL +"173.11",173,"ICA","ICA",NULL +"173.12",173,"JUNIN","JUN",NULL +"173.13",173,"LA_LIBERTAD","LAL",NULL +"173.14",173,"LAMBAYEQUE","LAM",NULL +"173.15",173,"LIMA","LIM",NULL +"173.16",173,"LORETO","LOR",NULL +"173.17",173,"MADRE_DE_DIOS","MDD",NULL +"173.18",173,"MOQUEGUA","MOQ",NULL +"173.19",173,"PASCO","PAS",NULL +"17.32",17,"RAGGED_ISLAND","RI",NULL +"173.2",173,"ANCASH","ANC",NULL +"173.20",173,"PIURA","PIU",NULL +"173.21",173,"PUNO","PUN",NULL +"173.22",173,"SAN_MARTIN","SAM",NULL +"173.23",173,"TACNA","TAC",NULL +"173.24",173,"TUMBES","TUM",NULL +"173.25",173,"UCAYALI","UCA",NULL +"17.33",17,"ROCK_SOUND","RS",NULL +"173.3",173,"APURIMAC","APU",NULL +"17.34",17,"RUM_CAY_DISTRICT","RC",NULL +"173.4",173,"AREQUIPA","ARE",NULL +"17.35",17,"SAN_SALVADOR_AND_RUM_CAY","SR",NULL +"173.5",173,"AYACUCHO","AYA",NULL +"17.36",17,"SAN_SALVADOR_ISLAND","SS",NULL +"173.6",173,"CAJAMARCA","CAJ",NULL +"17.37",17,"SANDY_POINT","SP",NULL +"173.7",173,"CALLAO","CAL",NULL +"17.38",17,"SOUTH_ABACO","SO",NULL +"173.8",173,"CUSCO","CUS",NULL +"17.39",17,"SOUTH_ANDROS","SA",NULL +"173.9",173,"HUANCAVELICA","HUV",NULL +"17.4",17,"BIMINI","BI",NULL +"17.40",17,"SOUTH_ELEUTHERA","SE",NULL +"17.41",17,"SPANISH_WELLS","SW",NULL +"174.1",174,"ABRA","ABR",NULL +"174.10",174,"BASILAN","BAS",NULL +"174.11",174,"BATAAN","BAN",NULL +"174.12",174,"BATANES","BTN",NULL +"174.13",174,"BATANGAS","BTG",NULL +"174.14",174,"BENGUET","BEN",NULL +"174.15",174,"BICOL",NULL,NULL +"174.16",174,"BILIRAN","BIL",NULL +"174.17",174,"BOHOL","BOH",NULL +"174.18",174,"BUKIDNON","BUK",NULL +"174.19",174,"BULACAN","BUL",NULL +"17.42",17,"WEST_GRAND_BAHAMA","WG",NULL +"174.2",174,"AGUSAN_DEL_NORTE","AGN",NULL +"174.20",174,"CAGAYAN","CAG",NULL +"174.21",174,"CAGAYAN_VALLEY",NULL,NULL +"174.22",174,"CALABARZON",NULL,NULL +"174.23",174,"CAMARINES_NORTE","CAN",NULL +"174.24",174,"CAMARINES_SUR","CAS",NULL +"174.25",174,"CAMIGUIN","CAM",NULL +"174.26",174,"CAPIZ","CAP",NULL +"174.27",174,"CARAGA",NULL,NULL +"174.28",174,"CATANDUANES","CAT",NULL +"174.29",174,"CAVITE","CAV",NULL +"174.3",174,"AGUSAN_DEL_SUR","AGS",NULL +"174.30",174,"CEBU","CEB",NULL +"174.31",174,"CENTRAL_LUZON",NULL,NULL +"174.32",174,"CENTRAL_VISAYAS",NULL,NULL +"174.33",174,"COMPOSTELA_VALLEY","COM",NULL +"174.34",174,"CORDILLERA_ADMINISTRATIVE",NULL,NULL +"174.35",174,"COTABATO","NCO",NULL +"174.36",174,"DAVAO",NULL,NULL +"174.37",174,"DAVAO_DEL_NORTE","DAV",NULL +"174.38",174,"DAVAO_DEL_SUR","DAS",NULL +"174.39",174,"DAVAO_OCCIDENTAL","DVO",NULL +"174.4",174,"AKLAN","AKL",NULL +"174.40",174,"DAVAO_ORIENTAL","DAO",NULL +"174.41",174,"DINAGAT_ISLANDS","DIN",NULL +"174.42",174,"EASTERN_SAMAR","EAS",NULL +"174.43",174,"EASTERN_VISAYAS",NULL,NULL +"174.44",174,"GUIMARAS","GUI",NULL +"174.45",174,"IFUGAO","IFU",NULL +"174.46",174,"ILOCOS",NULL,NULL +"174.47",174,"ILOCOS_NORTE","ILN",NULL +"174.48",174,"ILOCOS_SUR","ILS",NULL +"174.49",174,"ILOILO","ILI",NULL +"174.5",174,"ALBAY","ALB",NULL +"174.50",174,"ISABELA","ISA",NULL +"174.51",174,"KALINGA","KAL",NULL +"174.52",174,"LA_UNION","LUN",NULL +"174.53",174,"LAGUNA","LAG",NULL +"174.54",174,"LANAO_DEL_NORTE","LAN",NULL +"174.55",174,"LANAO_DEL_SUR","LAS",NULL +"174.56",174,"LEYTE","LEY",NULL +"174.57",174,"MAGUINDANAO","MAG",NULL +"174.58",174,"MARINDUQUE","MAD",NULL +"174.59",174,"MASBATE","MAS",NULL +"174.6",174,"ANTIQUE","ANT",NULL +"174.60",174,"METRO_MANILA","NCR",NULL +"174.61",174,"MIMAROPA",NULL,NULL +"174.62",174,"MISAMIS_OCCIDENTAL","MSC",NULL +"174.63",174,"MISAMIS_ORIENTAL","MSR",NULL +"174.64",174,"MOUNTAIN_PROVINCE","MOU",NULL +"174.65",174,"NEGROS_OCCIDENTAL","NEC",NULL +"174.66",174,"NEGROS_ORIENTAL","NER",NULL +"174.67",174,"NORTHERN_MINDANAO",NULL,NULL +"174.68",174,"NORTHERN_SAMAR","NSA",NULL +"174.69",174,"NUEVA_ECIJA","NUE",NULL +"174.7",174,"APAYAO","APA",NULL +"174.70",174,"NUEVA_VIZCAYA","NUV",NULL +"174.71",174,"OCCIDENTAL_MINDORO","MDC",NULL +"174.72",174,"ORIENTAL_MINDORO","MDR",NULL +"174.73",174,"PALAWAN","PLW",NULL +"174.74",174,"PAMPANGA","PAM",NULL +"174.75",174,"PANGASINAN","PAN",NULL +"174.76",174,"QUEZON","QUE",NULL +"174.77",174,"QUIRINO","QUI",NULL +"174.78",174,"RIZAL","RIZ",NULL +"174.79",174,"ROMBLON","ROM",NULL +"174.8",174,"AURORA","AUR",NULL +"174.80",174,"SARANGANI","SAR",NULL +"174.81",174,"SIQUIJOR","SIG",NULL +"174.82",174,"SOCCSKSARGEN",NULL,NULL +"174.83",174,"SORSOGON","SOR",NULL +"174.84",174,"SOUTH_COTABATO","SCO",NULL +"174.85",174,"SOUTHERN_LEYTE","SLE",NULL +"174.86",174,"SULTAN_KUDARAT","SUK",NULL +"174.87",174,"SULU","SLU",NULL +"174.88",174,"SURIGAO_DEL_NORTE","SUN",NULL +"174.89",174,"SURIGAO_DEL_SUR","SUR",NULL +"174.9",174,"AUTONOMOUS_REGION_IN_MUSLIM_MINDANAO",NULL,NULL +"174.90",174,"TARLAC","TAR",NULL +"174.91",174,"TAWI-TAWI","TAW",NULL +"174.92",174,"WESTERN_SAMAR","WSA",NULL +"174.93",174,"WESTERN_VISAYAS",NULL,NULL +"174.94",174,"ZAMBALES","ZMB",NULL +"174.95",174,"ZAMBOANGA_DEL_NORTE","ZAN",NULL +"174.96",174,"ZAMBOANGA_DEL_SUR","ZAS",NULL +"174.97",174,"ZAMBOANGA_PENINSULA",NULL,NULL +"174.98",174,"ZAMBOANGA_SIBUGAY","ZSI",NULL +"17.5",17,"BLACK_POINT","BP",NULL +"17.6",17,"CAT_ISLAND","CI",NULL +"176.1",176,"GREATER_POLAND_VOIVODESHIP","WP",NULL +"176.10",176,"PODKARPACKIE_VOIVODESHIP","PK",NULL +"176.11",176,"PODLASKIE_VOIVODESHIP","PD",NULL +"176.12",176,"POMERANIAN_VOIVODESHIP","PM",NULL +"176.13",176,"SILESIAN_VOIVODESHIP","SL",NULL +"176.14",176,"SWIETOKRZYSKIE_VOIVODESHIP","SK",NULL +"176.15",176,"WARMIAN-MASURIAN_VOIVODESHIP","WN",NULL +"176.16",176,"WEST_POMERANIAN_VOIVODESHIP","ZP",NULL +"176.2",176,"KUYAVIAN-POMERANIAN_VOIVODESHIP","KP",NULL +"176.3",176,"LESSER_POLAND_VOIVODESHIP","MA",NULL +"176.4",176,"LOWER_SILESIAN_VOIVODESHIP","DS",NULL +"176.5",176,"LUBLIN_VOIVODESHIP","LU",NULL +"176.6",176,"LUBUSZ_VOIVODESHIP","LB",NULL +"176.7",176,"LODZ_VOIVODESHIP","LD",NULL +"176.8",176,"MASOVIAN_VOIVODESHIP","MZ",NULL +"176.9",176,"OPOLE_VOIVODESHIP","OP",NULL +"17.7",17,"CENTRAL_ABACO","CO",NULL +"177.1",177,"ACORES",NULL,NULL +"177.10",177,"GUARDA",NULL,NULL +"177.11",177,"LEIRIA",NULL,NULL +"177.12",177,"LISBON",NULL,NULL +"177.13",177,"MADEIRA",NULL,NULL +"177.14",177,"PORTALEGRE",NULL,NULL +"177.15",177,"PORTO",NULL,NULL +"177.16",177,"SANTAREM",NULL,NULL +"177.17",177,"SETUBAL",NULL,NULL +"177.18",177,"VIANA_DO_CASTELO",NULL,NULL +"177.19",177,"VILA_REAL",NULL,NULL +"177.2",177,"AVEIRO",NULL,NULL +"177.20",177,"VISEU",NULL,NULL +"177.3",177,"BEJA",NULL,NULL +"177.4",177,"BRAGA",NULL,NULL +"177.5",177,"BRAGANCA",NULL,NULL +"177.6",177,"CASTELO_BRANCO",NULL,NULL +"177.7",177,"COIMBRA",NULL,NULL +"177.8",177,"EVORA",NULL,NULL +"177.9",177,"FARO",NULL,NULL +"17.8",17,"CENTRAL_ANDROS","CS",NULL +"178.1",178,"ADJUNTAS",NULL,NULL +"178.10",178,"BARCELONETA",NULL,NULL +"178.11",178,"BARRANQUITAS",NULL,NULL +"178.12",178,"BAYAMON","BY",NULL +"178.13",178,"BAYAMON",NULL,NULL +"178.14",178,"CABO_ROJO",NULL,NULL +"178.15",178,"CAGUAS","CG",NULL +"178.16",178,"CAGUAS",NULL,NULL +"178.17",178,"CAMUY",NULL,NULL +"178.18",178,"CANOVANAS",NULL,NULL +"178.19",178,"CAROLINA","CL",NULL +"178.2",178,"AGUADA",NULL,NULL +"178.20",178,"CAROLINA",NULL,NULL +"178.21",178,"CATANO",NULL,NULL +"178.22",178,"CAYEY",NULL,NULL +"178.23",178,"CEIBA",NULL,NULL +"178.24",178,"CIALES",NULL,NULL +"178.25",178,"CIDRA",NULL,NULL +"178.26",178,"COAMO",NULL,NULL +"178.27",178,"COMERIO",NULL,NULL +"178.28",178,"COROZAL",NULL,NULL +"178.29",178,"CULEBRA",NULL,NULL +"178.3",178,"AGUADILLA",NULL,NULL +"178.30",178,"DORADO",NULL,NULL +"178.31",178,"FAJARDO",NULL,NULL +"178.32",178,"FLORIDA",NULL,NULL +"178.33",178,"GUANICA",NULL,NULL +"178.34",178,"GUAYAMA",NULL,NULL +"178.35",178,"GUAYANILLA",NULL,NULL +"178.36",178,"GUAYNABO","GN",NULL +"178.37",178,"GUAYNABO",NULL,NULL +"178.38",178,"GURABO",NULL,NULL +"178.39",178,"HATILLO",NULL,NULL +"178.4",178,"AGUAS_BUENAS",NULL,NULL +"178.40",178,"HORMIGUEROS",NULL,NULL +"178.41",178,"HUMACAO",NULL,NULL +"178.42",178,"ISABELA",NULL,NULL +"178.43",178,"JAYUYA",NULL,NULL +"178.44",178,"JUANA_DIAZ",NULL,NULL +"178.45",178,"JUNCOS",NULL,NULL +"178.46",178,"LAJAS",NULL,NULL +"178.47",178,"LARES",NULL,NULL +"178.48",178,"LAS_MARIAS",NULL,NULL +"178.49",178,"LAS_PIEDRAS",NULL,NULL +"178.5",178,"AIBONITO",NULL,NULL +"178.50",178,"LOIZA",NULL,NULL +"178.51",178,"LUQUILLO",NULL,NULL +"178.52",178,"MANATI",NULL,NULL +"178.53",178,"MARICAO",NULL,NULL +"178.54",178,"MAUNABO",NULL,NULL +"178.55",178,"MAYAGUEZ","MG",NULL +"178.56",178,"MAYAGUEZ",NULL,NULL +"178.57",178,"MOCA",NULL,NULL +"178.58",178,"MOROVIS",NULL,NULL +"178.59",178,"NAGUABO",NULL,NULL +"178.6",178,"ANASCO",NULL,NULL +"178.60",178,"NARANJITO",NULL,NULL +"178.61",178,"OROCOVIS",NULL,NULL +"178.62",178,"PATILLAS",NULL,NULL +"178.63",178,"PENUELAS",NULL,NULL +"178.64",178,"PONCE","PO",NULL +"178.65",178,"PONCE",NULL,NULL +"178.66",178,"QUEBRADILLAS",NULL,NULL +"178.67",178,"RINCON",NULL,NULL +"178.68",178,"RIO_GRANDE",NULL,NULL +"178.69",178,"SABANA_GRANDE",NULL,NULL +"178.7",178,"ARECIBO",NULL,NULL +"178.70",178,"SALINAS",NULL,NULL +"178.71",178,"SAN_GERMAN",NULL,NULL +"178.72",178,"SAN_JUAN",NULL,NULL +"178.73",178,"SAN_JUAN","SJ",NULL +"178.74",178,"SAN_LORENZO",NULL,NULL +"178.75",178,"SAN_SEBASTIAN",NULL,NULL +"178.76",178,"SANTA_ISABEL",NULL,NULL +"178.77",178,"TOA_ALTA",NULL,NULL +"178.78",178,"TOA_BAJA","TB",NULL +"178.79",178,"TOA_BAJA",NULL,NULL +"178.8",178,"ARECIBO","AR",NULL +"178.80",178,"TRUJILLO_ALTO","TA",NULL +"178.81",178,"TRUJILLO_ALTO",NULL,NULL +"178.82",178,"UTUADO",NULL,NULL +"178.83",178,"VEGA_ALTA",NULL,NULL +"178.84",178,"VEGA_BAJA",NULL,NULL +"178.85",178,"VIEQUES",NULL,NULL +"178.86",178,"VILLALBA",NULL,NULL +"178.87",178,"YABUCOA",NULL,NULL +"178.88",178,"YAUCO",NULL,NULL +"178.9",178,"ARROYO",NULL,NULL +"17.9",17,"CENTRAL_ELEUTHERA","CE",NULL +"179.1",179,"AL_DAAYEN","ZA",NULL +"179.2",179,"AL_KHOR","KH",NULL +"179.3",179,"AL_RAYYAN_MUNICIPALITY","RA",NULL +"179.4",179,"AL_WAKRAH","WA",NULL +"179.5",179,"AL-SHAHANIYA","SH",NULL +"179.6",179,"DOHA","DA",NULL +"179.7",179,"MADINAT_ASH_SHAMAL","MS",NULL +"179.8",179,"UMM_SALAL_MUNICIPALITY","US",NULL +"1.8",1,"FARYAB","FYB",NULL +"18.1",18,"CAPITAL",NULL,NULL +"181.1",181,"ALBA","AB",NULL +"181.10",181,"BUCHAREST","B",NULL +"181.11",181,"BUZAU_COUNTY","BZ",NULL +"181.12",181,"CALARASI_COUNTY","CL",NULL +"181.13",181,"CARAS-SEVERIN_COUNTY","CS",NULL +"181.14",181,"CLUJ_COUNTY","CJ",NULL +"181.15",181,"CONSTANTA_COUNTY","CT",NULL +"181.16",181,"COVASNA_COUNTY","CV",NULL +"181.17",181,"DAMBOVITA_COUNTY","DB",NULL +"181.18",181,"DOLJ_COUNTY","DJ",NULL +"181.19",181,"GALATI_COUNTY","GL",NULL +"181.2",181,"ARAD_COUNTY","AR",NULL +"181.20",181,"GIURGIU_COUNTY","GR",NULL +"181.21",181,"GORJ_COUNTY","GJ",NULL +"181.22",181,"HARGHITA_COUNTY","HR",NULL +"181.23",181,"HUNEDOARA_COUNTY","HD",NULL +"181.24",181,"IALOMITA_COUNTY","IL",NULL +"181.25",181,"IASI_COUNTY","IS",NULL +"181.26",181,"ILFOV_COUNTY","IF",NULL +"181.27",181,"MARAMURES_COUNTY","MM",NULL +"181.28",181,"MEHEDINTI_COUNTY","MH",NULL +"181.29",181,"MURES_COUNTY","MS",NULL +"181.3",181,"ARGES","AG",NULL +"181.30",181,"NEAMT_COUNTY","NT",NULL +"181.31",181,"OLT_COUNTY","OT",NULL +"181.32",181,"PRAHOVA_COUNTY","PH",NULL +"181.33",181,"SALAJ_COUNTY","SJ",NULL +"181.34",181,"SATU_MARE_COUNTY","SM",NULL +"181.35",181,"SIBIU_COUNTY","SB",NULL +"181.36",181,"SUCEAVA_COUNTY","SV",NULL +"181.37",181,"TELEORMAN_COUNTY","TR",NULL +"181.38",181,"TIMIS_COUNTY","TM",NULL +"181.39",181,"TULCEA_COUNTY","TL",NULL +"181.4",181,"BACAU_COUNTY","BC",NULL +"181.40",181,"VALCEA_COUNTY","VL",NULL +"181.41",181,"VASLUI_COUNTY","VS",NULL +"181.42",181,"VRANCEA_COUNTY","VN",NULL +"181.5",181,"BIHOR_COUNTY","BH",NULL +"181.6",181,"BISTRITA-NASAUD_COUNTY","BN",NULL +"181.7",181,"BOTOSANI_COUNTY","BT",NULL +"181.8",181,"BRAILA","BR",NULL +"181.9",181,"BRASOV_COUNTY","BV",NULL +"18.2",18,"CENTRAL",NULL,NULL +"182.1",182,"ALTAI_KRAI","ALT",NULL +"182.10",182,"CHUKOTKA_AUTONOMOUS_OKRUG","CHU",NULL +"182.11",182,"CHUVASH_REPUBLIC","CU",NULL +"182.12",182,"IRKUTSK","IRK",NULL +"182.13",182,"IVANOVO_OBLAST","IVA",NULL +"182.14",182,"JEWISH_AUTONOMOUS_OBLAST","YEV",NULL +"182.15",182,"KABARDINO-BALKAR_REPUBLIC","KB",NULL +"182.16",182,"KALININGRAD","KGD",NULL +"182.17",182,"KALUGA_OBLAST","KLU",NULL +"182.18",182,"KAMCHATKA_KRAI","KAM",NULL +"182.19",182,"KARACHAY-CHERKESS_REPUBLIC","KC",NULL +"182.2",182,"ALTAI_REPUBLIC","AL",NULL +"182.20",182,"KEMEROVO_OBLAST","KEM",NULL +"182.21",182,"KHABAROVSK_KRAI","KHA",NULL +"182.22",182,"KHANTY-MANSI_AUTONOMOUS_OKRUG","KHM",NULL +"182.23",182,"KIROV_OBLAST","KIR",NULL +"182.24",182,"KOMI_REPUBLIC","KO",NULL +"182.25",182,"KOSTROMA_OBLAST","KOS",NULL +"182.26",182,"KRASNODAR_KRAI","KDA",NULL +"182.27",182,"KRASNOYARSK_KRAI","KYA",NULL +"182.28",182,"KURGAN_OBLAST","KGN",NULL +"182.29",182,"KURSK_OBLAST","KRS",NULL +"182.3",182,"AMUR_OBLAST","AMU",NULL +"182.30",182,"LENINGRAD_OBLAST","LEN",NULL +"182.31",182,"LIPETSK_OBLAST","LIP",NULL +"182.32",182,"MAGADAN_OBLAST","MAG",NULL +"182.33",182,"MARI_EL_REPUBLIC","ME",NULL +"182.34",182,"MOSCOW","MOW",NULL +"182.35",182,"MOSCOW_OBLAST","MOS",NULL +"182.36",182,"MURMANSK_OBLAST","MUR",NULL +"182.37",182,"NENETS_AUTONOMOUS_OKRUG","NEN",NULL +"182.38",182,"NIZHNY_NOVGOROD_OBLAST","NIZ",NULL +"182.39",182,"NOVGOROD_OBLAST","NGR",NULL +"182.4",182,"ARKHANGELSK","ARK",NULL +"182.40",182,"NOVOSIBIRSK","NVS",NULL +"182.41",182,"OMSK_OBLAST","OMS",NULL +"182.42",182,"ORENBURG_OBLAST","ORE",NULL +"182.43",182,"ORYOL_OBLAST","ORL",NULL +"182.44",182,"PENZA_OBLAST","PNZ",NULL +"182.45",182,"PERM_KRAI","PER",NULL +"182.46",182,"PRIMORSKY_KRAI","PRI",NULL +"182.47",182,"PSKOV_OBLAST","PSK",NULL +"182.48",182,"REPUBLIC_OF_ADYGEA","AD",NULL +"182.49",182,"REPUBLIC_OF_BASHKORTOSTAN","BA",NULL +"182.5",182,"ASTRAKHAN_OBLAST","AST",NULL +"182.50",182,"REPUBLIC_OF_BURYATIA","BU",NULL +"182.51",182,"REPUBLIC_OF_DAGESTAN","DA",NULL +"182.52",182,"REPUBLIC_OF_INGUSHETIA","IN",NULL +"182.53",182,"REPUBLIC_OF_KALMYKIA","KL",NULL +"182.54",182,"REPUBLIC_OF_KARELIA","KR",NULL +"182.55",182,"REPUBLIC_OF_KHAKASSIA","KK",NULL +"182.56",182,"REPUBLIC_OF_MORDOVIA","MO",NULL +"182.57",182,"REPUBLIC_OF_NORTH_OSSETIA-ALANIA","SE",NULL +"182.58",182,"REPUBLIC_OF_TATARSTAN","TA",NULL +"182.59",182,"ROSTOV_OBLAST","ROS",NULL +"182.6",182,"BELGOROD_OBLAST","BEL",NULL +"182.60",182,"RYAZAN_OBLAST","RYA",NULL +"182.61",182,"SAINT_PETERSBURG","SPE",NULL +"182.62",182,"SAKHA_REPUBLIC","SA",NULL +"182.63",182,"SAKHALIN","SAK",NULL +"182.64",182,"SAMARA_OBLAST","SAM",NULL +"182.65",182,"SARATOV_OBLAST","SAR",NULL +"182.66",182,"SEVASTOPOL","UA-40",NULL +"182.67",182,"SMOLENSK_OBLAST","SMO",NULL +"182.68",182,"STAVROPOL_KRAI","STA",NULL +"182.69",182,"SVERDLOVSK","SVE",NULL +"182.7",182,"BRYANSK_OBLAST","BRY",NULL +"182.70",182,"TAMBOV_OBLAST","TAM",NULL +"182.71",182,"TOMSK_OBLAST","TOM",NULL +"182.72",182,"TULA_OBLAST","TUL",NULL +"182.73",182,"TUVA_REPUBLIC","TY",NULL +"182.74",182,"TVER_OBLAST","TVE",NULL +"182.75",182,"TYUMEN_OBLAST","TYU",NULL +"182.76",182,"UDMURT_REPUBLIC","UD",NULL +"182.77",182,"ULYANOVSK_OBLAST","ULY",NULL +"182.78",182,"VLADIMIR_OBLAST","VLA",NULL +"182.79",182,"VOLGOGRAD_OBLAST","VGG",NULL +"182.8",182,"CHECHEN_REPUBLIC","CE",NULL +"182.80",182,"VOLOGDA_OBLAST","VLG",NULL +"182.81",182,"VORONEZH_OBLAST","VOR",NULL +"182.82",182,"YAMALO-NENETS_AUTONOMOUS_OKRUG","YAN",NULL +"182.83",182,"YAROSLAVL_OBLAST","YAR",NULL +"182.84",182,"ZABAYKALSKY_KRAI","ZAB",NULL +"182.9",182,"CHELYABINSK_OBLAST","CHE",NULL +"18.3",18,"MUHARRAQ",NULL,NULL +"183.1",183,"EASTERN_PROVINCE",NULL,NULL +"183.2",183,"KIGALI_DISTRICT",NULL,NULL +"183.3",183,"NORTHERN_PROVINCE",NULL,NULL +"183.4",183,"SOUTHERN_PROVINCE",NULL,NULL +"183.5",183,"WESTERN_PROVINCE",NULL,NULL +"18.4",18,"NORTHERN",NULL,NULL +"18.5",18,"SOUTHERN",NULL,NULL +"185.1",185,"CHRIST_CHURCH_NICHOLA_TOWN_PARISH",NULL,NULL +"185.10",185,"SAINT_PAUL_CAPISTERRE_PARISH",NULL,NULL +"185.11",185,"SAINT_PAUL_CHARLESTOWN_PARISH",NULL,NULL +"185.12",185,"SAINT_PETER_BASSETERRE_PARISH",NULL,NULL +"185.13",185,"SAINT_THOMAS_LOWLAND_PARISH",NULL,NULL +"185.14",185,"SAINT_THOMAS_MIDDLE_ISLAND_PARISH",NULL,NULL +"185.15",185,"TRINITY_PALMETTO_POINT_PARISH",NULL,NULL +"185.2",185,"NEVIS","N",NULL +"185.3",185,"SAINT_ANNE_SANDY_POINT_PARISH",NULL,NULL +"185.4",185,"SAINT_GEORGE_GINGERLAND_PARISH",NULL,NULL +"185.5",185,"SAINT_JAMES_WINDWARD_PARISH",NULL,NULL +"185.6",185,"SAINT_JOHN_CAPISTERRE_PARISH",NULL,NULL +"185.7",185,"SAINT_JOHN_FIGTREE_PARISH",NULL,NULL +"185.8",185,"SAINT_KITTS","K",NULL +"185.9",185,"SAINT_MARY_CAYON_PARISH",NULL,NULL +"186.1",186,"ANSE_LA_RAYE_QUARTER",NULL,NULL +"186.10",186,"PRASLIN_QUARTER",NULL,NULL +"186.11",186,"SOUFRIERE_QUARTER",NULL,NULL +"186.12",186,"VIEUX_FORT_QUARTER",NULL,NULL +"186.2",186,"CANARIES",NULL,NULL +"186.3",186,"CASTRIES_QUARTER",NULL,NULL +"186.4",186,"CHOISEUL_QUARTER",NULL,NULL +"186.5",186,"DAUPHIN_QUARTER",NULL,NULL +"186.6",186,"DENNERY_QUARTER",NULL,NULL +"186.7",186,"GROS_ISLET_QUARTER",NULL,NULL +"186.8",186,"LABORIE_QUARTER",NULL,NULL +"186.9",186,"MICOUD_QUARTER",NULL,NULL +"188.1",188,"CHARLOTTE_PARISH",NULL,NULL +"188.2",188,"GRENADINES_PARISH",NULL,NULL +"188.3",188,"SAINT_ANDREW_PARISH",NULL,NULL +"188.4",188,"SAINT_DAVID_PARISH",NULL,NULL +"188.5",188,"SAINT_GEORGE_PARISH",NULL,NULL +"188.6",188,"SAINT_PATRICK_PARISH",NULL,NULL +"1.9",1,"GHAZNI","GHA",NULL +"19.1",19,"BAGERHAT_DISTRICT",NULL,NULL +"19.10",19,"CHANDPUR_DISTRICT",NULL,NULL +"19.11",19,"CHAPAI_NAWABGANJ_DISTRICT",NULL,NULL +"191.1",191,"A'ANA","AA",NULL +"191.10",191,"VA'A-O-FONOTI","VF",NULL +"191.11",191,"VAISIGANO","VS",NULL +"19.12",19,"CHITTAGONG_DISTRICT",NULL,NULL +"191.2",191,"AIGA-I-LE-TAI","AL",NULL +"19.13",19,"CHITTAGONG_DIVISION","B",NULL +"191.3",191,"ATUA","AT",NULL +"19.14",19,"CHUADANGA_DISTRICT",NULL,NULL +"191.4",191,"FA'ASALELEAGA","FA",NULL +"19.15",19,"COMILLA_DISTRICT",NULL,NULL +"191.5",191,"GAGA'EMAUGA","GE",NULL +"19.16",19,"COX'S_BAZAR_DISTRICT",NULL,NULL +"191.6",191,"GAGA'IFOMAUGA","GI",NULL +"19.17",19,"DHAKA_DISTRICT",NULL,NULL +"191.7",191,"PALAULI","PA",NULL +"19.18",19,"DHAKA_DIVISION","C",NULL +"191.8",191,"SATUPA'ITEA","SA",NULL +"19.19",19,"DINAJPUR_DISTRICT",NULL,NULL +"191.9",191,"TUAMASAGA","TU",NULL +"19.2",19,"BAHADIA",NULL,NULL +"19.20",19,"FARIDPUR_DISTRICT",NULL,NULL +"19.21",19,"FENI_DISTRICT",NULL,NULL +"192.1",192,"ACQUAVIVA",NULL,NULL +"19.22",19,"GAIBANDHA_DISTRICT",NULL,NULL +"192.2",192,"BORGO_MAGGIORE",NULL,NULL +"19.23",19,"GAZIPUR_DISTRICT",NULL,NULL +"192.3",192,"CHIESANUOVA",NULL,NULL +"19.24",19,"GOPALGANJ_DISTRICT",NULL,NULL +"192.4",192,"DOMAGNANO",NULL,NULL +"19.25",19,"HABIGANJ_DISTRICT",NULL,NULL +"192.5",192,"FAETANO",NULL,NULL +"19.26",19,"JAMALPUR_DISTRICT",NULL,NULL +"192.6",192,"FIORENTINO",NULL,NULL +"19.27",19,"JESSORE_DISTRICT",NULL,NULL +"192.7",192,"MONTEGIARDINO",NULL,NULL +"19.28",19,"JHALOKATI_DISTRICT",NULL,NULL +"192.8",192,"SAN_MARINO",NULL,NULL +"19.29",19,"JHENAIDAH_DISTRICT",NULL,NULL +"192.9",192,"SERRAVALLE",NULL,NULL +"19.3",19,"BANDARBAN_DISTRICT",NULL,NULL +"19.30",19,"JOYPURHAT_DISTRICT",NULL,NULL +"19.31",19,"KHAGRACHARI_DISTRICT",NULL,NULL +"193.1",193,"PRINCIPE_PROVINCE","P",NULL +"19.32",19,"KHULNA_DISTRICT",NULL,NULL +"193.2",193,"SAO_TOME_PROVINCE","S",NULL +"19.33",19,"KHULNA_DIVISION","D",NULL +"19.34",19,"KISHOREGANJ_DISTRICT",NULL,NULL +"19.35",19,"KURIGRAM_DISTRICT",NULL,NULL +"19.36",19,"KUSHTIA_DISTRICT",NULL,NULL +"19.37",19,"LAKSHMIPUR_DISTRICT",NULL,NULL +"19.38",19,"LALMONIRHAT_DISTRICT",NULL,NULL +"19.39",19,"MADARIPUR_DISTRICT",NULL,NULL +"19.4",19,"BARGUNA_DISTRICT",NULL,NULL +"19.40",19,"MEHERPUR_DISTRICT",NULL,NULL +"19.41",19,"MOULVIBAZAR_DISTRICT",NULL,NULL +"194.1",194,"ASIR",NULL,NULL +"194.10",194,"NAJRAN",NULL,NULL +"194.11",194,"NORTHERN_BORDERS",NULL,NULL +"194.12",194,"RIYADH",NULL,NULL +"194.13",194,"TABUK",NULL,NULL +"19.42",19,"MUNSHIGANJ_DISTRICT",NULL,NULL +"194.2",194,"AL_BAHAH",NULL,NULL +"19.43",19,"MYMENSINGH_DISTRICT",NULL,NULL +"194.3",194,"AL_JAWF",NULL,NULL +"19.44",19,"MYMENSINGH_DIVISION","H",NULL +"194.4",194,"AL_MADINAH",NULL,NULL +"19.45",19,"NAOGAON_DISTRICT",NULL,NULL +"194.5",194,"AL-QASSIM",NULL,NULL +"19.46",19,"NARAIL_DISTRICT",NULL,NULL +"194.6",194,"EASTERN_PROVINCE",NULL,NULL +"19.47",19,"NARAYANGANJ_DISTRICT",NULL,NULL +"194.7",194,"HA'IL",NULL,NULL +"19.48",19,"NATORE_DISTRICT",NULL,NULL +"194.8",194,"JIZAN",NULL,NULL +"19.49",19,"NETROKONA_DISTRICT",NULL,NULL +"194.9",194,"MAKKAH",NULL,NULL +"19.5",19,"BARISAL_DISTRICT",NULL,NULL +"19.50",19,"NILPHAMARI_DISTRICT",NULL,NULL +"19.51",19,"NOAKHALI_DISTRICT",NULL,NULL +"195.1",195,"DAKAR","DK",NULL +"195.10",195,"SAINT-LOUIS","SL",NULL +"195.11",195,"SEDHIOU","SE",NULL +"195.12",195,"TAMBACOUNDA_REGION","TC",NULL +"195.13",195,"THIES_REGION","TH",NULL +"195.14",195,"ZIGUINCHOR","ZG",NULL +"19.52",19,"PABNA_DISTRICT",NULL,NULL +"195.2",195,"DIOURBEL_REGION","DB",NULL +"19.53",19,"PANCHAGARH_DISTRICT",NULL,NULL +"195.3",195,"FATICK","FK",NULL +"19.54",19,"PATUAKHALI_DISTRICT",NULL,NULL +"195.4",195,"KAFFRINE","KA",NULL +"19.55",19,"PIROJPUR_DISTRICT",NULL,NULL +"195.5",195,"KAOLACK","KL",NULL +"19.56",19,"RAJBARI_DISTRICT",NULL,NULL +"195.6",195,"KEDOUGOU","KE",NULL +"19.57",19,"RAJSHAHI_DISTRICT",NULL,NULL +"195.7",195,"KOLDA","KD",NULL +"19.58",19,"RAJSHAHI_DIVISION","E",NULL +"195.8",195,"LOUGA","LG",NULL +"19.59",19,"RANGAMATI_HILL_DISTRICT",NULL,NULL +"195.9",195,"MATAM","MT",NULL +"19.6",19,"BARISAL_DIVISION","A",NULL +"19.60",19,"RANGPUR_DISTRICT",NULL,NULL +"19.61",19,"RANGPUR_DIVISION","F",NULL +"196.1",196,"BELGRADE",NULL,NULL +"196.10",196,"NORTH_BACKA_DISTRICT",NULL,NULL +"196.11",196,"NORTH_BANAT_DISTRICT",NULL,NULL +"196.12",196,"PCINJA_DISTRICT",NULL,NULL +"196.13",196,"PIROT_DISTRICT",NULL,NULL +"196.14",196,"PODUNAVLJE_DISTRICT",NULL,NULL +"196.15",196,"POMORAVLJE_DISTRICT",NULL,NULL +"196.16",196,"RASINA_DISTRICT",NULL,NULL +"196.17",196,"RASKA_DISTRICT",NULL,NULL +"196.18",196,"SOUTH_BACKA_DISTRICT",NULL,NULL +"196.19",196,"SOUTH_BANAT_DISTRICT",NULL,NULL +"19.62",19,"SATKHIRA_DISTRICT",NULL,NULL +"196.2",196,"BOR_DISTRICT",NULL,NULL +"196.20",196,"SREM_DISTRICT",NULL,NULL +"196.21",196,"SUMADIJA_DISTRICT",NULL,NULL +"196.22",196,"TOPLICA_DISTRICT",NULL,NULL +"196.23",196,"VOJVODINA","VO",NULL +"196.24",196,"WEST_BACKA_DISTRICT",NULL,NULL +"196.25",196,"ZAJECAR_DISTRICT",NULL,NULL +"196.26",196,"ZLATIBOR_DISTRICT",NULL,NULL +"19.63",19,"SHARIATPUR_DISTRICT",NULL,NULL +"196.3",196,"BRANICEVO_DISTRICT",NULL,NULL +"19.64",19,"SHERPUR_DISTRICT",NULL,NULL +"196.4",196,"CENTRAL_BANAT_DISTRICT",NULL,NULL +"19.65",19,"SIRAJGANJ_DISTRICT",NULL,NULL +"196.5",196,"JABLANICA_DISTRICT",NULL,NULL +"19.66",19,"SUNAMGANJ_DISTRICT",NULL,NULL +"196.6",196,"KOLUBARA_DISTRICT",NULL,NULL +"19.67",19,"SYLHET_DISTRICT",NULL,NULL +"196.7",196,"MACVA_DISTRICT",NULL,NULL +"19.68",19,"SYLHET_DIVISION","G",NULL +"196.8",196,"MORAVICA_DISTRICT",NULL,NULL +"19.69",19,"TANGAIL_DISTRICT",NULL,NULL +"196.9",196,"NISAVA_DISTRICT",NULL,NULL +"19.7",19,"BHOLA_DISTRICT",NULL,NULL +"19.70",19,"THAKURGAON_DISTRICT",NULL,NULL +"197.1",197,"ANSE_BOILEAU",NULL,NULL +"197.10",197,"CASCADE",NULL,NULL +"197.11",197,"GLACIS",NULL,NULL +"197.12",197,"GRAND'ANSE_MAHE",NULL,NULL +"197.13",197,"GRAND'ANSE_PRASLIN",NULL,NULL +"197.14",197,"LA_DIGUE",NULL,NULL +"197.15",197,"LA_RIVIERE_ANGLAISE",NULL,NULL +"197.16",197,"LES_MAMELLES",NULL,NULL +"197.17",197,"MONT_BUXTON",NULL,NULL +"197.18",197,"MONT_FLEURI",NULL,NULL +"197.19",197,"PLAISANCE",NULL,NULL +"197.2",197,"ANSE_ROYALE",NULL,NULL +"197.20",197,"POINTE_LA_RUE",NULL,NULL +"197.21",197,"PORT_GLAUD",NULL,NULL +"197.22",197,"ROCHE_CAIMAN",NULL,NULL +"197.23",197,"SAINT_LOUIS",NULL,NULL +"197.24",197,"TAKAMAKA",NULL,NULL +"197.3",197,"ANSE-AUX-PINS",NULL,NULL +"197.4",197,"AU_CAP",NULL,NULL +"197.5",197,"BAIE_LAZARE",NULL,NULL +"197.6",197,"BAIE_SAINTE_ANNE",NULL,NULL +"197.7",197,"BEAU_VALLON",NULL,NULL +"197.8",197,"BEL_AIR",NULL,NULL +"197.9",197,"BEL_OMBRE",NULL,NULL +"19.8",19,"BOGRA_DISTRICT",NULL,NULL +"198.1",198,"EASTERN_PROVINCE","E",NULL +"198.2",198,"NORTHERN_PROVINCE","N",NULL +"198.3",198,"SOUTHERN_PROVINCE","S",NULL +"198.4",198,"WESTERN_AREA","W",NULL +"19.9",19,"BRAHMANBARIA_DISTRICT",NULL,NULL +"199.1",199,"CENTRAL_SINGAPORE",NULL,NULL +"199.2",199,"NORTH_EAST",NULL,NULL +"199.3",199,"NORTH_WEST",NULL,NULL +"199.4",199,"SOUTH_EAST",NULL,NULL +"199.5",199,"SOUTH_WEST",NULL,NULL +"200.1",200,"BANSKA_BYSTRICA_REGION","BC",NULL +"200.2",200,"BRATISLAVA_REGION","BL",NULL +"200.3",200,"KOSICE_REGION","KI",NULL +"200.4",200,"NITRA_REGION","NI",NULL +"200.5",200,"PRESOV_REGION","PV",NULL +"200.6",200,"TRENCIN_REGION","TC",NULL +"200.7",200,"TRNAVA_REGION","TA",NULL +"200.8",200,"ZILINA_REGION","ZI",NULL +"20.1",20,"CHRIST_CHURCH",NULL,NULL +"20.10",20,"SAINT_PHILIP",NULL,NULL +"20.11",20,"SAINT_THOMAS",NULL,NULL +"201.1",201,"AJDOVSCINA_MUNICIPALITY",NULL,NULL +"201.10",201,"BOVEC_MUNICIPALITY",NULL,NULL +"201.100",201,"MIRNA_MUNICIPALITY",NULL,NULL +"201.101",201,"MIRNA_PEC_MUNICIPALITY",NULL,NULL +"201.102",201,"MISLINJA_MUNICIPALITY",NULL,NULL +"201.103",201,"MOKRONOG-TREBELNO_MUNICIPALITY",NULL,NULL +"201.104",201,"MORAVCE_MUNICIPALITY",NULL,NULL +"201.105",201,"MORAVSKE_TOPLICE_MUNICIPALITY",NULL,NULL +"201.106",201,"MOZIRJE_MUNICIPALITY",NULL,NULL +"201.107",201,"MUNICIPALITY_OF_APACE",NULL,NULL +"201.108",201,"MUNICIPALITY_OF_CIRKULANE",NULL,NULL +"201.109",201,"MUNICIPALITY_OF_ILIRSKA_BISTRICA",NULL,NULL +"201.11",201,"BRASLOVCE_MUNICIPALITY",NULL,NULL +"201.110",201,"MUNICIPALITY_OF_KRSKO",NULL,NULL +"201.111",201,"MUNICIPALITY_OF_SKOFLJICA",NULL,NULL +"201.112",201,"MURSKA_SOBOTA_CITY_MUNICIPALITY",NULL,NULL +"201.113",201,"MUTA_MUNICIPALITY",NULL,NULL +"201.114",201,"NAKLO_MUNICIPALITY",NULL,NULL +"201.115",201,"NAZARJE_MUNICIPALITY",NULL,NULL +"201.116",201,"NOVA_GORICA_CITY_MUNICIPALITY",NULL,NULL +"201.117",201,"ODRANCI_MUNICIPALITY",NULL,NULL +"201.118",201,"OPLOTNICA",NULL,NULL +"201.119",201,"ORMOZ_MUNICIPALITY",NULL,NULL +"201.12",201,"BRDA_MUNICIPALITY",NULL,NULL +"201.120",201,"OSILNICA_MUNICIPALITY",NULL,NULL +"201.121",201,"PESNICA_MUNICIPALITY",NULL,NULL +"201.122",201,"PIRAN_MUNICIPALITY",NULL,NULL +"201.123",201,"PIVKA_MUNICIPALITY",NULL,NULL +"201.124",201,"PODCETRTEK_MUNICIPALITY",NULL,NULL +"201.125",201,"PODLEHNIK_MUNICIPALITY",NULL,NULL +"201.126",201,"PODVELKA_MUNICIPALITY",NULL,NULL +"201.127",201,"POLJCANE_MUNICIPALITY",NULL,NULL +"201.128",201,"POLZELA_MUNICIPALITY",NULL,NULL +"201.129",201,"POSTOJNA_MUNICIPALITY",NULL,NULL +"201.13",201,"BREZICE_MUNICIPALITY",NULL,NULL +"201.130",201,"PREBOLD_MUNICIPALITY",NULL,NULL +"201.131",201,"PREDDVOR_MUNICIPALITY",NULL,NULL +"201.132",201,"PREVALJE_MUNICIPALITY",NULL,NULL +"201.133",201,"PTUJ_CITY_MUNICIPALITY",NULL,NULL +"201.134",201,"PUCONCI_MUNICIPALITY",NULL,NULL +"201.135",201,"RACE-FRAM_MUNICIPALITY",NULL,NULL +"201.136",201,"RADECE_MUNICIPALITY",NULL,NULL +"201.137",201,"RADENCI_MUNICIPALITY",NULL,NULL +"201.138",201,"RADLJE_OB_DRAVI_MUNICIPALITY",NULL,NULL +"201.139",201,"RADOVLJICA_MUNICIPALITY",NULL,NULL +"201.14",201,"BREZOVICA_MUNICIPALITY",NULL,NULL +"201.140",201,"RAVNE_NA_KOROSKEM_MUNICIPALITY",NULL,NULL +"201.141",201,"RAZKRIZJE_MUNICIPALITY",NULL,NULL +"201.142",201,"RECICA_OB_SAVINJI_MUNICIPALITY",NULL,NULL +"201.143",201,"RENCE-VOGRSKO_MUNICIPALITY",NULL,NULL +"201.144",201,"RIBNICA_MUNICIPALITY",NULL,NULL +"201.145",201,"RIBNICA_NA_POHORJU_MUNICIPALITY",NULL,NULL +"201.146",201,"ROGASKA_SLATINA_MUNICIPALITY",NULL,NULL +"201.147",201,"ROGASOVCI_MUNICIPALITY",NULL,NULL +"201.148",201,"ROGATEC_MUNICIPALITY",NULL,NULL +"201.149",201,"RUSE_MUNICIPALITY",NULL,NULL +"201.15",201,"CANKOVA_MUNICIPALITY",NULL,NULL +"201.150",201,"SALOVCI_MUNICIPALITY",NULL,NULL +"201.151",201,"SELNICA_OB_DRAVI_MUNICIPALITY",NULL,NULL +"201.152",201,"SEMIC_MUNICIPALITY",NULL,NULL +"201.153",201,"SEMPETER-VRTOJBA_MUNICIPALITY",NULL,NULL +"201.154",201,"SENCUR_MUNICIPALITY",NULL,NULL +"201.155",201,"SENTILJ_MUNICIPALITY",NULL,NULL +"201.156",201,"SENTJERNEJ_MUNICIPALITY",NULL,NULL +"201.157",201,"SENTJUR_MUNICIPALITY",NULL,NULL +"201.158",201,"SENTRUPERT_MUNICIPALITY",NULL,NULL +"201.159",201,"SEVNICA_MUNICIPALITY",NULL,NULL +"201.16",201,"CERKLJE_NA_GORENJSKEM_MUNICIPALITY",NULL,NULL +"201.160",201,"SEZANA_MUNICIPALITY",NULL,NULL +"201.161",201,"SKOCJAN_MUNICIPALITY",NULL,NULL +"201.162",201,"SKOFJA_LOKA_MUNICIPALITY",NULL,NULL +"201.163",201,"SLOVENJ_GRADEC_CITY_MUNICIPALITY",NULL,NULL +"201.164",201,"SLOVENSKA_BISTRICA_MUNICIPALITY",NULL,NULL +"201.165",201,"SLOVENSKE_KONJICE_MUNICIPALITY",NULL,NULL +"201.166",201,"SMARJE_PRI_JELSAH_MUNICIPALITY",NULL,NULL +"201.167",201,"SMARJESKE_TOPLICE_MUNICIPALITY",NULL,NULL +"201.168",201,"SMARTNO_OB_PAKI_MUNICIPALITY",NULL,NULL +"201.169",201,"SMARTNO_PRI_LITIJI_MUNICIPALITY",NULL,NULL +"201.17",201,"CERKNICA_MUNICIPALITY",NULL,NULL +"201.170",201,"SODRAZICA_MUNICIPALITY",NULL,NULL +"201.171",201,"SOLCAVA_MUNICIPALITY",NULL,NULL +"201.172",201,"SOSTANJ_MUNICIPALITY",NULL,NULL +"201.173",201,"SREDISCE_OB_DRAVI",NULL,NULL +"201.174",201,"STARSE_MUNICIPALITY",NULL,NULL +"201.175",201,"STORE_MUNICIPALITY",NULL,NULL +"201.176",201,"STRAZA_MUNICIPALITY",NULL,NULL +"201.177",201,"SVETA_ANA_MUNICIPALITY",NULL,NULL +"201.178",201,"SVETA_TROJICA_V_SLOVENSKIH_GORICAH_MUNICIPALITY",NULL,NULL +"201.179",201,"SVETI_ANDRAZ_V_SLOVENSKIH_GORICAH_MUNICIPALITY",NULL,NULL +"201.18",201,"CERKNO_MUNICIPALITY",NULL,NULL +"201.180",201,"SVETI_JURIJ_OB_SCAVNICI_MUNICIPALITY",NULL,NULL +"201.181",201,"SVETI_JURIJ_V_SLOVENSKIH_GORICAH_MUNICIPALITY",NULL,NULL +"201.182",201,"SVETI_TOMAZ_MUNICIPALITY",NULL,NULL +"201.183",201,"TABOR_MUNICIPALITY",NULL,NULL +"201.184",201,"TISINA_MUNICIPALITY",NULL,NULL +"201.185",201,"TOLMIN_MUNICIPALITY",NULL,NULL +"201.186",201,"TRBOVLJE_MUNICIPALITY",NULL,NULL +"201.187",201,"TREBNJE_MUNICIPALITY",NULL,NULL +"201.188",201,"TRNOVSKA_VAS_MUNICIPALITY",NULL,NULL +"201.189",201,"TRZIC_MUNICIPALITY",NULL,NULL +"201.19",201,"CERKVENJAK_MUNICIPALITY",NULL,NULL +"201.190",201,"TRZIN_MUNICIPALITY",NULL,NULL +"201.191",201,"TURNISCE_MUNICIPALITY",NULL,NULL +"201.192",201,"VELIKA_POLANA_MUNICIPALITY",NULL,NULL +"201.193",201,"VELIKE_LASCE_MUNICIPALITY",NULL,NULL +"201.194",201,"VERZEJ_MUNICIPALITY",NULL,NULL +"201.195",201,"VIDEM_MUNICIPALITY",NULL,NULL +"201.196",201,"VIPAVA_MUNICIPALITY",NULL,NULL +"201.197",201,"VITANJE_MUNICIPALITY",NULL,NULL +"201.198",201,"VODICE_MUNICIPALITY",NULL,NULL +"201.199",201,"VOJNIK_MUNICIPALITY",NULL,NULL +"201.2",201,"ANKARAN_MUNICIPALITY",NULL,NULL +"201.20",201,"CITY_MUNICIPALITY_OF_CELJE",NULL,NULL +"201.200",201,"VRANSKO_MUNICIPALITY",NULL,NULL +"201.201",201,"VRHNIKA_MUNICIPALITY",NULL,NULL +"201.202",201,"VUZENICA_MUNICIPALITY",NULL,NULL +"201.203",201,"ZAGORJE_OB_SAVI_MUNICIPALITY",NULL,NULL +"201.204",201,"ZALEC_MUNICIPALITY",NULL,NULL +"201.205",201,"ZAVRC_MUNICIPALITY",NULL,NULL +"201.206",201,"ZELEZNIKI_MUNICIPALITY",NULL,NULL +"201.207",201,"ZETALE_MUNICIPALITY",NULL,NULL +"201.208",201,"ZIRI_MUNICIPALITY",NULL,NULL +"201.209",201,"ZIROVNICA_MUNICIPALITY",NULL,NULL +"201.21",201,"CITY_MUNICIPALITY_OF_NOVO_MESTO",NULL,NULL +"201.210",201,"ZRECE_MUNICIPALITY",NULL,NULL +"201.211",201,"ZUZEMBERK_MUNICIPALITY",NULL,NULL +"201.22",201,"CRENSOVCI_MUNICIPALITY",NULL,NULL +"201.23",201,"CRNA_NA_KOROSKEM_MUNICIPALITY",NULL,NULL +"201.24",201,"CRNOMELJ_MUNICIPALITY",NULL,NULL +"201.25",201,"DESTRNIK_MUNICIPALITY",NULL,NULL +"201.26",201,"DIVACA_MUNICIPALITY",NULL,NULL +"201.27",201,"DOBJE_MUNICIPALITY",NULL,NULL +"201.28",201,"DOBREPOLJE_MUNICIPALITY",NULL,NULL +"201.29",201,"DOBRNA_MUNICIPALITY",NULL,NULL +"201.3",201,"BELTINCI_MUNICIPALITY",NULL,NULL +"201.30",201,"DOBROVA-POLHOV_GRADEC_MUNICIPALITY",NULL,NULL +"201.31",201,"DOBROVNIK_MUNICIPALITY",NULL,NULL +"201.32",201,"DOL_PRI_LJUBLJANI_MUNICIPALITY",NULL,NULL +"201.33",201,"DOLENJSKE_TOPLICE_MUNICIPALITY",NULL,NULL +"201.34",201,"DOMZALE_MUNICIPALITY",NULL,NULL +"201.35",201,"DORNAVA_MUNICIPALITY",NULL,NULL +"201.36",201,"DRAVOGRAD_MUNICIPALITY",NULL,NULL +"201.37",201,"DUPLEK_MUNICIPALITY",NULL,NULL +"201.38",201,"GORENJA_VAS-POLJANE_MUNICIPALITY",NULL,NULL +"201.39",201,"GORISNICA_MUNICIPALITY",NULL,NULL +"201.4",201,"BENEDIKT_MUNICIPALITY",NULL,NULL +"201.40",201,"GORJE_MUNICIPALITY",NULL,NULL +"201.41",201,"GORNJA_RADGONA_MUNICIPALITY",NULL,NULL +"201.42",201,"GORNJI_GRAD_MUNICIPALITY",NULL,NULL +"201.43",201,"GORNJI_PETROVCI_MUNICIPALITY",NULL,NULL +"201.44",201,"GRAD_MUNICIPALITY",NULL,NULL +"201.45",201,"GROSUPLJE_MUNICIPALITY",NULL,NULL +"201.46",201,"HAJDINA_MUNICIPALITY",NULL,NULL +"201.47",201,"HOCE-SLIVNICA_MUNICIPALITY",NULL,NULL +"201.48",201,"HODOS_MUNICIPALITY",NULL,NULL +"201.49",201,"HORJUL_MUNICIPALITY",NULL,NULL +"201.5",201,"BISTRICA_OB_SOTLI_MUNICIPALITY",NULL,NULL +"201.50",201,"HRASTNIK_MUNICIPALITY",NULL,NULL +"201.51",201,"HRPELJE-KOZINA_MUNICIPALITY",NULL,NULL +"201.52",201,"IDRIJA_MUNICIPALITY",NULL,NULL +"201.53",201,"IG_MUNICIPALITY",NULL,NULL +"201.54",201,"IVANCNA_GORICA_MUNICIPALITY",NULL,NULL +"201.55",201,"IZOLA_MUNICIPALITY",NULL,NULL +"201.56",201,"JESENICE_MUNICIPALITY",NULL,NULL +"201.57",201,"JEZERSKO_MUNICIPALITY",NULL,NULL +"201.58",201,"JURSINCI_MUNICIPALITY",NULL,NULL +"201.59",201,"KAMNIK_MUNICIPALITY",NULL,NULL +"201.6",201,"BLED_MUNICIPALITY",NULL,NULL +"201.60",201,"KANAL_OB_SOCI_MUNICIPALITY",NULL,NULL +"201.61",201,"KIDRICEVO_MUNICIPALITY",NULL,NULL +"201.62",201,"KOBARID_MUNICIPALITY",NULL,NULL +"201.63",201,"KOBILJE_MUNICIPALITY",NULL,NULL +"201.64",201,"KOCEVJE_MUNICIPALITY",NULL,NULL +"201.65",201,"KOMEN_MUNICIPALITY",NULL,NULL +"201.66",201,"KOMENDA_MUNICIPALITY",NULL,NULL +"201.67",201,"KOPER_CITY_MUNICIPALITY",NULL,NULL +"201.68",201,"KOSTANJEVICA_NA_KRKI_MUNICIPALITY",NULL,NULL +"201.69",201,"KOSTEL_MUNICIPALITY",NULL,NULL +"201.7",201,"BLOKE_MUNICIPALITY",NULL,NULL +"201.70",201,"KOZJE_MUNICIPALITY",NULL,NULL +"201.71",201,"KRANJ_CITY_MUNICIPALITY",NULL,NULL +"201.72",201,"KRANJSKA_GORA_MUNICIPALITY",NULL,NULL +"201.73",201,"KRIZEVCI_MUNICIPALITY",NULL,NULL +"201.74",201,"KUNGOTA",NULL,NULL +"201.75",201,"KUZMA_MUNICIPALITY",NULL,NULL +"201.76",201,"LASKO_MUNICIPALITY",NULL,NULL +"201.77",201,"LENART_MUNICIPALITY",NULL,NULL +"201.78",201,"LENDAVA_MUNICIPALITY",NULL,NULL +"201.79",201,"LITIJA_MUNICIPALITY",NULL,NULL +"201.8",201,"BOHINJ_MUNICIPALITY",NULL,NULL +"201.80",201,"LJUBLJANA_CITY_MUNICIPALITY",NULL,NULL +"201.81",201,"LJUBNO_MUNICIPALITY",NULL,NULL +"201.82",201,"LJUTOMER_MUNICIPALITY",NULL,NULL +"201.83",201,"LOG-DRAGOMER_MUNICIPALITY",NULL,NULL +"201.84",201,"LOGATEC_MUNICIPALITY",NULL,NULL +"201.85",201,"LOSKA_DOLINA_MUNICIPALITY",NULL,NULL +"201.86",201,"LOSKI_POTOK_MUNICIPALITY",NULL,NULL +"201.87",201,"LOVRENC_NA_POHORJU_MUNICIPALITY",NULL,NULL +"201.88",201,"LUCE_MUNICIPALITY",NULL,NULL +"201.89",201,"LUKOVICA_MUNICIPALITY",NULL,NULL +"201.9",201,"BOROVNICA_MUNICIPALITY",NULL,NULL +"201.90",201,"MAJSPERK_MUNICIPALITY",NULL,NULL +"201.91",201,"MAKOLE_MUNICIPALITY",NULL,NULL +"201.92",201,"MARIBOR_CITY_MUNICIPALITY",NULL,NULL +"201.93",201,"MARKOVCI_MUNICIPALITY",NULL,NULL +"201.94",201,"MEDVODE_MUNICIPALITY",NULL,NULL +"201.95",201,"MENGES_MUNICIPALITY",NULL,NULL +"201.96",201,"METLIKA_MUNICIPALITY",NULL,NULL +"201.97",201,"MEZICA_MUNICIPALITY",NULL,NULL +"201.98",201,"MIKLAVZ_NA_DRAVSKEM_POLJU_MUNICIPALITY",NULL,NULL +"201.99",201,"MIREN-KOSTANJEVICA_MUNICIPALITY",NULL,NULL +"20.2",20,"SAINT_ANDREW",NULL,NULL +"202.1",202,"CENTRAL_PROVINCE","CE",NULL +"202.10",202,"WESTERN_PROVINCE","WE",NULL +"202.2",202,"CHOISEUL_PROVINCE","CH",NULL +"202.3",202,"GUADALCANAL_PROVINCE","GU",NULL +"202.4",202,"HONIARA","CT",NULL +"202.5",202,"ISABEL_PROVINCE","IS",NULL +"202.6",202,"MAKIRA-ULAWA_PROVINCE","MK",NULL +"202.7",202,"MALAITA_PROVINCE","ML",NULL +"202.8",202,"RENNELL_AND_BELLONA_PROVINCE","RB",NULL +"202.9",202,"TEMOTU_PROVINCE","TE",NULL +"20.3",20,"SAINT_GEORGE",NULL,NULL +"203.1",203,"AWDAL_REGION","AW",NULL +"203.10",203,"LOWER_SHEBELLE","SH",NULL +"203.11",203,"MIDDLE_JUBA","JD",NULL +"203.12",203,"MIDDLE_SHEBELLE","SD",NULL +"203.13",203,"MUDUG","MU",NULL +"203.14",203,"NUGAL","NU",NULL +"203.15",203,"SANAAG_REGION","SA",NULL +"203.16",203,"TOGDHEER_REGION","TO",NULL +"203.2",203,"BAKOOL","BK",NULL +"203.3",203,"BANAADIR","BN",NULL +"203.4",203,"BARI","BR",NULL +"203.5",203,"BAY","BY",NULL +"203.6",203,"GALGUDUUD","GA",NULL +"203.7",203,"GEDO","GE",NULL +"203.8",203,"HIRAN","HI",NULL +"203.9",203,"LOWER_JUBA","JH",NULL +"20.4",20,"SAINT_JAMES",NULL,NULL +"204.1",204,"EASTERN_CAPE","EC",NULL +"204.2",204,"FREE_STATE","FS",NULL +"204.3",204,"GAUTENG","GP",NULL +"204.4",204,"KWAZULU-NATAL","KZN",NULL +"204.5",204,"LIMPOPO","LP",NULL +"204.6",204,"MPUMALANGA","MP",NULL +"204.7",204,"NORTH_WEST","NW",NULL +"204.8",204,"NORTHERN_CAPE","NC",NULL +"204.9",204,"WESTERN_CAPE","WC",NULL +"20.5",20,"SAINT_JOHN",NULL,NULL +"20.6",20,"SAINT_JOSEPH",NULL,NULL +"206.1",206,"CENTRAL_EQUATORIA","EC",NULL +"206.10",206,"WESTERN_EQUATORIA","EW",NULL +"206.2",206,"EASTERN_EQUATORIA","EE",NULL +"206.3",206,"JONGLEI_STATE","JG",NULL +"206.4",206,"LAKES","LK",NULL +"206.5",206,"NORTHERN_BAHR_EL_GHAZAL","BN",NULL +"206.6",206,"UNITY","UY",NULL +"206.7",206,"UPPER_NILE","NU",NULL +"206.8",206,"WARRAP","WR",NULL +"206.9",206,"WESTERN_BAHR_EL_GHAZAL","BW",NULL +"20.7",20,"SAINT_LUCY",NULL,NULL +"207.1",207,"A_CORUNA","C",NULL +"207.10",207,"BIZKAIA","BI",NULL +"207.11",207,"BURGOS","BU",NULL +"207.12",207,"CACERES","CC",NULL +"207.13",207,"CADIZ","CA",NULL +"207.14",207,"CANTABRIA","S",NULL +"207.15",207,"CASTELLON","CS",NULL +"207.16",207,"CIUDAD_REAL","CR",NULL +"207.17",207,"CORDOBA","CO",NULL +"207.18",207,"CUENCA","CU",NULL +"207.19",207,"GIPUZKOA","SS",NULL +"207.2",207,"ALBACETE","AB",NULL +"207.20",207,"GIRONA","GI",NULL +"207.21",207,"GRANADA","GR",NULL +"207.22",207,"GUADALAJARA","GU",NULL +"207.23",207,"HUELVA","H",NULL +"207.24",207,"HUESCA","HU",NULL +"207.25",207,"ISLAS_BALEARES","PM",NULL +"207.26",207,"JAEN","J",NULL +"207.27",207,"LA_RIOJA","LO",NULL +"207.28",207,"LAS_PALMAS","GC",NULL +"207.29",207,"LEON","LE",NULL +"207.3",207,"ALICANTE","A",NULL +"207.30",207,"LLEIDA","L",NULL +"207.31",207,"LUGO","LU",NULL +"207.32",207,"MADRID","M",NULL +"207.33",207,"MALAGA","MA",NULL +"207.34",207,"MURCIA","MU",NULL +"207.35",207,"NAVARRA",NULL,NULL +"207.36",207,"OURENSE","OR",NULL +"207.37",207,"PALENCIA","P",NULL +"207.38",207,"PONTEVEDRA","PO",NULL +"207.39",207,"SALAMANCA","SA",NULL +"207.4",207,"ALMERIA","AL",NULL +"207.40",207,"SANTA_CRUZ_DE_TENERIFE","TF",NULL +"207.41",207,"SEGOVIA","SG",NULL +"207.42",207,"SEVILLA","SE",NULL +"207.43",207,"SORIA","SO",NULL +"207.44",207,"TARRAGONA","T",NULL +"207.45",207,"TERUEL","TE",NULL +"207.46",207,"TOLEDO","TO",NULL +"207.47",207,"VALENCIA","V",NULL +"207.48",207,"VALLADOLID","VA",NULL +"207.49",207,"ZAMORA","ZA",NULL +"207.5",207,"ARABA","VI",NULL +"207.50",207,"ZARAGOZA","Z",NULL +"207.6",207,"ASTURIAS","O",NULL +"207.7",207,"AVILA","AV",NULL +"207.8",207,"BADAJOZ","BA",NULL +"207.9",207,"BARCELONA","B",NULL +"20.8",20,"SAINT_MICHAEL",NULL,NULL +"208.1",208,"AMPARA_DISTRICT",NULL,NULL +"208.10",208,"HAMBANTOTA_DISTRICT",NULL,NULL +"208.11",208,"JAFFNA_DISTRICT",NULL,NULL +"208.12",208,"KALUTARA_DISTRICT",NULL,NULL +"208.13",208,"KANDY_DISTRICT",NULL,NULL +"208.14",208,"KEGALLE_DISTRICT",NULL,NULL +"208.15",208,"KILINOCHCHI_DISTRICT",NULL,NULL +"208.16",208,"MANNAR_DISTRICT",NULL,NULL +"208.17",208,"MATALE_DISTRICT",NULL,NULL +"208.18",208,"MATARA_DISTRICT",NULL,NULL +"208.19",208,"MONARAGALA_DISTRICT",NULL,NULL +"208.2",208,"ANURADHAPURA_DISTRICT",NULL,NULL +"208.20",208,"MULLAITIVU_DISTRICT",NULL,NULL +"208.21",208,"NORTH_CENTRAL_PROVINCE",NULL,NULL +"208.22",208,"NORTH_WESTERN_PROVINCE",NULL,NULL +"208.23",208,"NORTHERN_PROVINCE",NULL,NULL +"208.24",208,"NUWARA_ELIYA_DISTRICT",NULL,NULL +"208.25",208,"POLONNARUWA_DISTRICT",NULL,NULL +"208.26",208,"PUTTALAM_DISTRICT",NULL,NULL +"208.27",208,"RATNAPURA_DISTRICT",NULL,NULL +"208.28",208,"SABARAGAMUWA_PROVINCE",NULL,NULL +"208.29",208,"SOUTHERN_PROVINCE",NULL,NULL +"208.3",208,"BADULLA_DISTRICT",NULL,NULL +"208.30",208,"TRINCOMALEE_DISTRICT",NULL,NULL +"208.31",208,"UVA_PROVINCE",NULL,NULL +"208.32",208,"VAVUNIYA_DISTRICT",NULL,NULL +"208.33",208,"WESTERN_PROVINCE",NULL,NULL +"208.4",208,"BATTICALOA_DISTRICT",NULL,NULL +"208.5",208,"CENTRAL_PROVINCE",NULL,NULL +"208.6",208,"COLOMBO_DISTRICT",NULL,NULL +"208.7",208,"EASTERN_PROVINCE",NULL,NULL +"208.8",208,"GALLE_DISTRICT",NULL,NULL +"208.9",208,"GAMPAHA_DISTRICT",NULL,NULL +"20.9",20,"SAINT_PETER",NULL,NULL +"209.1",209,"AL_JAZIRAH","GZ",NULL +"209.10",209,"NORTHERN","NO",NULL +"209.11",209,"RED_SEA","RS",NULL +"209.12",209,"RIVER_NILE","NR",NULL +"209.13",209,"SENNAR","SI",NULL +"209.14",209,"SOUTH_DARFUR","DS",NULL +"209.15",209,"SOUTH_KORDOFAN","KS",NULL +"209.16",209,"WEST_DARFUR","DW",NULL +"209.17",209,"WEST_KORDOFAN","GK",NULL +"209.18",209,"WHITE_NILE","NW",NULL +"209.2",209,"AL_QADARIF","GD",NULL +"209.3",209,"BLUE_NILE","NB",NULL +"209.4",209,"CENTRAL_DARFUR","DC",NULL +"209.5",209,"EAST_DARFUR","DE",NULL +"209.6",209,"KASSALA","KA",NULL +"209.7",209,"KHARTOUM","KH",NULL +"209.8",209,"NORTH_DARFUR","DN",NULL +"209.9",209,"NORTH_KORDOFAN","KN",NULL +"210.1",210,"BROKOPONDO_DISTRICT","BR",NULL +"210.10",210,"WANICA_DISTRICT","WA",NULL +"210.2",210,"COMMEWIJNE_DISTRICT","CM",NULL +"210.3",210,"CORONIE_DISTRICT","CR",NULL +"210.4",210,"MAROWIJNE_DISTRICT","MA",NULL +"210.5",210,"NICKERIE_DISTRICT","NI",NULL +"210.6",210,"PARA_DISTRICT","PR",NULL +"210.7",210,"PARAMARIBO_DISTRICT","PM",NULL +"210.8",210,"SARAMACCA_DISTRICT","SA",NULL +"210.9",210,"SIPALIWINI_DISTRICT","SI",NULL +"21.1",21,"BREST_REGION","BR",NULL +"21.2",21,"GOMEL_REGION","HO",NULL +"212.1",212,"HHOHHO_DISTRICT","HH",NULL +"212.2",212,"LUBOMBO_DISTRICT","LU",NULL +"212.3",212,"MANZINI_DISTRICT","MA",NULL +"212.4",212,"SHISELWENI_DISTRICT","SH",NULL +"21.3",21,"GRODNO_REGION","HR",NULL +"213.1",213,"BLEKINGE","K",NULL +"213.10",213,"NORRBOTTEN_COUNTY","BD",NULL +"213.11",213,"OREBRO_COUNTY","T",NULL +"213.12",213,"OSTERGOTLAND_COUNTY","E",NULL +"213.13",213,"SKANE_COUNTY","M",NULL +"213.14",213,"SODERMANLAND_COUNTY","D",NULL +"213.15",213,"STOCKHOLM_COUNTY","AB",NULL +"213.16",213,"UPPSALA_COUNTY","C",NULL +"213.17",213,"VARMLAND_COUNTY","S",NULL +"213.18",213,"VASTERBOTTEN_COUNTY","AC",NULL +"213.19",213,"VASTERNORRLAND_COUNTY","Y",NULL +"213.2",213,"DALARNA_COUNTY","W",NULL +"213.20",213,"VASTMANLAND_COUNTY","U",NULL +"213.21",213,"VASTRA_GOTALAND_COUNTY","O",NULL +"213.3",213,"GAVLEBORG_COUNTY","X",NULL +"213.4",213,"GOTLAND_COUNTY","I",NULL +"213.5",213,"HALLAND_COUNTY","N",NULL +"213.6",213,"JAMTLAND_COUNTY",NULL,NULL +"213.7",213,"JONKOPING_COUNTY","F",NULL +"213.8",213,"KALMAR_COUNTY","H",NULL +"213.9",213,"KRONOBERG_COUNTY","G",NULL +"21.4",21,"MINSK","HM",NULL +"214.1",214,"AARGAU","AG",NULL +"214.10",214,"GRAUBUNDEN","GR",NULL +"214.11",214,"JURA","JU",NULL +"214.12",214,"LUCERNE","LU",NULL +"214.13",214,"NEUCHATEL","NE",NULL +"214.14",214,"NIDWALDEN","NW",NULL +"214.15",214,"OBWALDEN","OW",NULL +"214.16",214,"SCHAFFHAUSEN","SH",NULL +"214.17",214,"SCHWYZ","SZ",NULL +"214.18",214,"SOLOTHURN","SO",NULL +"214.19",214,"ST._GALLEN","SG",NULL +"214.2",214,"APPENZELL_AUSSERRHODEN","AR",NULL +"214.20",214,"THURGAU","TG",NULL +"214.21",214,"TICINO","TI",NULL +"214.22",214,"URI","UR",NULL +"214.23",214,"VALAIS","VS",NULL +"214.24",214,"VAUD","VD",NULL +"214.25",214,"ZUG","ZG",NULL +"214.26",214,"ZURICH","ZH",NULL +"214.3",214,"APPENZELL_INNERRHODEN","AI",NULL +"214.4",214,"BASEL-LAND","BL",NULL +"214.5",214,"BASEL-STADT","BS",NULL +"214.6",214,"BERN","BE",NULL +"214.7",214,"FRIBOURG","FR",NULL +"214.8",214,"GENEVA","GE",NULL +"214.9",214,"GLARUS","GL",NULL +"21.5",21,"MINSK_REGION","MI",NULL +"215.1",215,"AL-HASAKAH","HA",NULL +"215.10",215,"IDLIB","ID",NULL +"215.11",215,"LATAKIA","LA",NULL +"215.12",215,"QUNEITRA","QU",NULL +"215.13",215,"RIF_DIMASHQ","RD",NULL +"215.14",215,"TARTUS","TA",NULL +"215.2",215,"AL-RAQQAH","RA",NULL +"215.3",215,"ALEPPO","HL",NULL +"215.4",215,"AS-SUWAYDA","SU",NULL +"215.5",215,"DAMASCUS","DI",NULL +"215.6",215,"DARAA","DR",NULL +"215.7",215,"DEIR_EZ-ZOR","DY",NULL +"215.8",215,"HAMA","HM",NULL +"215.9",215,"HOMS","HI",NULL +"21.6",21,"MOGILEV_REGION","MA",NULL +"216.1",216,"CHANGHUA","CHA",NULL +"216.10",216,"LIENCHIANG","LIE",NULL +"216.11",216,"MIAOLI","MIA",NULL +"216.12",216,"NANTOU","NAN",NULL +"216.13",216,"NEW_TAIPEI","NWT",NULL +"216.14",216,"PENGHU","PEN",NULL +"216.15",216,"PINGTUNG","PIF",NULL +"216.16",216,"TAICHUNG","TXG",NULL +"216.17",216,"TAINAN","TNN",NULL +"216.18",216,"TAIPEI","TPE",NULL +"216.19",216,"TAITUNG","TTT",NULL +"216.2",216,"CHIAYI","CYI",NULL +"216.20",216,"TAOYUAN","TAO",NULL +"216.21",216,"YILAN","ILA",NULL +"216.22",216,"YUNLIN","YUN",NULL +"216.3",216,"CHIAYI","CYQ",NULL +"216.4",216,"HSINCHU","HSQ",NULL +"216.5",216,"HSINCHU","HSZ",NULL +"216.6",216,"HUALIEN","HUA",NULL +"216.7",216,"KAOHSIUNG","KHH",NULL +"216.8",216,"KEELUNG","KEE",NULL +"216.9",216,"KINMEN","KIN",NULL +"21.7",21,"VITEBSK_REGION","VI",NULL +"217.1",217,"DISTRICTS_OF_REPUBLICAN_SUBORDINATION","RA",NULL +"217.2",217,"GORNO-BADAKHSHAN_AUTONOMOUS_PROVINCE","GB",NULL +"217.3",217,"KHATLON_PROVINCE","KT",NULL +"217.4",217,"SUGHD_PROVINCE","SU",NULL +"218.1",218,"ARUSHA",NULL,NULL +"218.10",218,"LINDI",NULL,NULL +"218.11",218,"MANYARA",NULL,NULL +"218.12",218,"MARA",NULL,NULL +"218.13",218,"MBEYA",NULL,NULL +"218.14",218,"MOROGORO",NULL,NULL +"218.15",218,"MTWARA",NULL,NULL +"218.16",218,"MWANZA",NULL,NULL +"218.17",218,"NJOMBE",NULL,NULL +"218.18",218,"PEMBA_NORTH",NULL,NULL +"218.19",218,"PEMBA_SOUTH",NULL,NULL +"218.2",218,"DAR_ES_SALAAM",NULL,NULL +"218.20",218,"PWANI",NULL,NULL +"218.21",218,"RUKWA",NULL,NULL +"218.22",218,"RUVUMA",NULL,NULL +"218.23",218,"SHINYANGA",NULL,NULL +"218.24",218,"SIMIYU",NULL,NULL +"218.25",218,"SINGIDA",NULL,NULL +"218.26",218,"SONGWE",NULL,NULL +"218.27",218,"TABORA",NULL,NULL +"218.28",218,"TANGA",NULL,NULL +"218.29",218,"ZANZIBAR_NORTH",NULL,NULL +"218.3",218,"DODOMA",NULL,NULL +"218.30",218,"ZANZIBAR_SOUTH",NULL,NULL +"218.31",218,"ZANZIBAR_WEST",NULL,NULL +"218.4",218,"GEITA",NULL,NULL +"218.5",218,"IRINGA",NULL,NULL +"218.6",218,"KAGERA",NULL,NULL +"218.7",218,"KATAVI",NULL,NULL +"218.8",218,"KIGOMA",NULL,NULL +"218.9",218,"KILIMANJARO",NULL,NULL +"219.1",219,"AMNAT_CHAROEN",NULL,NULL +"219.10",219,"CHIANG_MAI",NULL,NULL +"219.11",219,"CHIANG_RAI",NULL,NULL +"219.12",219,"CHON_BURI",NULL,NULL +"219.13",219,"CHUMPHON",NULL,NULL +"219.14",219,"KALASIN",NULL,NULL +"219.15",219,"KAMPHAENG_PHET",NULL,NULL +"219.16",219,"KANCHANABURI",NULL,NULL +"219.17",219,"KHON_KAEN",NULL,NULL +"219.18",219,"KRABI",NULL,NULL +"219.19",219,"LAMPANG",NULL,NULL +"219.2",219,"ANG_THONG",NULL,NULL +"219.20",219,"LAMPHUN",NULL,NULL +"219.21",219,"LOEI",NULL,NULL +"219.22",219,"LOP_BURI",NULL,NULL +"219.23",219,"MAE_HONG_SON",NULL,NULL +"219.24",219,"MAHA_SARAKHAM",NULL,NULL +"219.25",219,"MUKDAHAN",NULL,NULL +"219.26",219,"NAKHON_NAYOK",NULL,NULL +"219.27",219,"NAKHON_PATHOM",NULL,NULL +"219.28",219,"NAKHON_PHANOM",NULL,NULL +"219.29",219,"NAKHON_RATCHASIMA",NULL,NULL +"219.3",219,"BANGKOK",NULL,NULL +"219.30",219,"NAKHON_SAWAN",NULL,NULL +"219.31",219,"NAKHON_SI_THAMMARAT",NULL,NULL +"219.32",219,"NAN",NULL,NULL +"219.33",219,"NARATHIWAT",NULL,NULL +"219.34",219,"NONG_BUA_LAM_PHU",NULL,NULL +"219.35",219,"NONG_KHAI",NULL,NULL +"219.36",219,"NONTHABURI",NULL,NULL +"219.37",219,"PATHUM_THANI",NULL,NULL +"219.38",219,"PATTANI",NULL,NULL +"219.39",219,"PATTAYA","S",NULL +"219.4",219,"BUENG_KAN",NULL,NULL +"219.40",219,"PHANGNGA",NULL,NULL +"219.41",219,"PHATTHALUNG",NULL,NULL +"219.42",219,"PHAYAO",NULL,NULL +"219.43",219,"PHETCHABUN",NULL,NULL +"219.44",219,"PHETCHABURI",NULL,NULL +"219.45",219,"PHICHIT",NULL,NULL +"219.46",219,"PHITSANULOK",NULL,NULL +"219.47",219,"PHRA_NAKHON_SI_AYUTTHAYA",NULL,NULL +"219.48",219,"PHRAE",NULL,NULL +"219.49",219,"PHUKET",NULL,NULL +"219.5",219,"BURI_RAM",NULL,NULL +"219.50",219,"PRACHIN_BURI",NULL,NULL +"219.51",219,"PRACHUAP_KHIRI_KHAN",NULL,NULL +"219.52",219,"RANONG",NULL,NULL +"219.53",219,"RATCHABURI",NULL,NULL +"219.54",219,"RAYONG",NULL,NULL +"219.55",219,"ROI_ET",NULL,NULL +"219.56",219,"SA_KAEO",NULL,NULL +"219.57",219,"SAKON_NAKHON",NULL,NULL +"219.58",219,"SAMUT_PRAKAN",NULL,NULL +"219.59",219,"SAMUT_SAKHON",NULL,NULL +"219.6",219,"CHACHOENGSAO",NULL,NULL +"219.60",219,"SAMUT_SONGKHRAM",NULL,NULL +"219.61",219,"SARABURI",NULL,NULL +"219.62",219,"SATUN",NULL,NULL +"219.63",219,"SI_SA_KET",NULL,NULL +"219.64",219,"SING_BURI",NULL,NULL +"219.65",219,"SONGKHLA",NULL,NULL +"219.66",219,"SUKHOTHAI",NULL,NULL +"219.67",219,"SUPHAN_BURI",NULL,NULL +"219.68",219,"SURAT_THANI",NULL,NULL +"219.69",219,"SURIN",NULL,NULL +"219.7",219,"CHAI_NAT",NULL,NULL +"219.70",219,"TAK",NULL,NULL +"219.71",219,"TRANG",NULL,NULL +"219.72",219,"TRAT",NULL,NULL +"219.73",219,"UBON_RATCHATHANI",NULL,NULL +"219.74",219,"UDON_THANI",NULL,NULL +"219.75",219,"UTHAI_THANI",NULL,NULL +"219.76",219,"UTTARADIT",NULL,NULL +"219.77",219,"YALA",NULL,NULL +"219.78",219,"YASOTHON",NULL,NULL +"219.8",219,"CHAIYAPHUM",NULL,NULL +"219.9",219,"CHANTHABURI",NULL,NULL +"220.1",220,"CENTRALE_REGION","C",NULL +"220.2",220,"KARA_REGION","K",NULL +"220.3",220,"MARITIME","M",NULL +"220.4",220,"PLATEAUX_REGION","P",NULL +"220.5",220,"SAVANES_REGION","S",NULL +"22.1",22,"ANTWERP","VAN",NULL +"22.10",22,"NAMUR","WNA",NULL +"22.11",22,"WALLONIA","WAL",NULL +"22.12",22,"WALLOON_BRABANT","WBR",NULL +"22.13",22,"WEST_FLANDERS","VWV",NULL +"22.2",22,"BRUSSELS-CAPITAL_REGION","BRU",NULL +"222.1",222,"HA`APAI",NULL,NULL +"222.2",222,"`EUA",NULL,NULL +"222.3",222,"NIUAS",NULL,NULL +"222.4",222,"TONGATAPU",NULL,NULL +"222.5",222,"VAVA`U",NULL,NULL +"22.3",22,"EAST_FLANDERS","VOV",NULL +"223.1",223,"ARIMA","ARI",NULL +"223.10",223,"RIO_CLARO-MAYARO_REGIONAL_CORPORATION","MRC",NULL +"223.11",223,"SAN_FERNANDO","SFO",NULL +"223.12",223,"SAN_JUAN-LAVENTILLE_REGIONAL_CORPORATION","SJL",NULL +"223.13",223,"SANGRE_GRANDE_REGIONAL_CORPORATION","SGE",NULL +"223.14",223,"SIPARIA_REGIONAL_CORPORATION","SIP",NULL +"223.15",223,"TUNAPUNA-PIARCO_REGIONAL_CORPORATION","TUP",NULL +"223.16",223,"WESTERN_TOBAGO","WTO",NULL +"223.2",223,"CHAGUANAS","CHA",NULL +"223.3",223,"COUVA-TABAQUITE-TALPARO_REGIONAL_CORPORATION","CTT",NULL +"223.4",223,"DIEGO_MARTIN_REGIONAL_CORPORATION","DMN",NULL +"223.5",223,"EASTERN_TOBAGO","ETO",NULL +"223.6",223,"PENAL-DEBE_REGIONAL_CORPORATION","PED",NULL +"223.7",223,"POINT_FORTIN","PTF",NULL +"223.8",223,"PORT_OF_SPAIN","POS",NULL +"223.9",223,"PRINCES_TOWN_REGIONAL_CORPORATION","PRT",NULL +"22.4",22,"FLANDERS","VLG",NULL +"224.1",224,"ARIANA",NULL,NULL +"224.10",224,"KEBILI",NULL,NULL +"224.11",224,"KEF",NULL,NULL +"224.12",224,"MAHDIA",NULL,NULL +"224.13",224,"MANOUBA",NULL,NULL +"224.14",224,"MEDENINE",NULL,NULL +"224.15",224,"MONASTIR",NULL,NULL +"224.16",224,"NABEUL",NULL,NULL +"224.17",224,"SFAX",NULL,NULL +"224.18",224,"SIDI_BOUZID",NULL,NULL +"224.19",224,"SILIANA",NULL,NULL +"224.2",224,"BEJA",NULL,NULL +"224.20",224,"SOUSSE",NULL,NULL +"224.21",224,"TATAOUINE",NULL,NULL +"224.22",224,"TOZEUR",NULL,NULL +"224.23",224,"TUNIS",NULL,NULL +"224.24",224,"ZAGHOUAN",NULL,NULL +"224.3",224,"BEN_AROUS",NULL,NULL +"224.4",224,"BIZERTE",NULL,NULL +"224.5",224,"GABES",NULL,NULL +"224.6",224,"GAFSA",NULL,NULL +"224.7",224,"JENDOUBA",NULL,NULL +"224.8",224,"KAIROUAN",NULL,NULL +"224.9",224,"KASSERINE",NULL,NULL +"22.5",22,"FLEMISH_BRABANT","VBR",NULL +"225.1",225,"ADANA",NULL,NULL +"225.10",225,"ARTVIN",NULL,NULL +"225.11",225,"AYDIN",NULL,NULL +"225.12",225,"BALIKESIR",NULL,NULL +"225.13",225,"BARTIN",NULL,NULL +"225.14",225,"BATMAN",NULL,NULL +"225.15",225,"BAYBURT",NULL,NULL +"225.16",225,"BILECIK",NULL,NULL +"225.17",225,"BINGOL",NULL,NULL +"225.18",225,"BITLIS",NULL,NULL +"225.19",225,"BOLU",NULL,NULL +"225.2",225,"ADIYAMAN",NULL,NULL +"225.20",225,"BURDUR",NULL,NULL +"225.21",225,"BURSA",NULL,NULL +"225.22",225,"CANAKKALE",NULL,NULL +"225.23",225,"CANKIRI",NULL,NULL +"225.24",225,"CORUM",NULL,NULL +"225.25",225,"DENIZLI",NULL,NULL +"225.26",225,"DIYARBAKIR",NULL,NULL +"225.27",225,"DUZCE",NULL,NULL +"225.28",225,"EDIRNE",NULL,NULL +"225.29",225,"ELAZIG",NULL,NULL +"225.3",225,"AFYONKARAHISAR",NULL,NULL +"225.30",225,"ERZINCAN",NULL,NULL +"225.31",225,"ERZURUM",NULL,NULL +"225.32",225,"ESKISEHIR",NULL,NULL +"225.33",225,"GAZIANTEP",NULL,NULL +"225.34",225,"GIRESUN",NULL,NULL +"225.35",225,"GUMUSHANE",NULL,NULL +"225.36",225,"HAKKARI",NULL,NULL +"225.37",225,"HATAY",NULL,NULL +"225.38",225,"IGDIR",NULL,NULL +"225.39",225,"ISPARTA",NULL,NULL +"225.4",225,"AGRI",NULL,NULL +"225.40",225,"ISTANBUL",NULL,NULL +"225.41",225,"IZMIR",NULL,NULL +"225.42",225,"KAHRAMANMARAS",NULL,NULL +"225.43",225,"KARABUK",NULL,NULL +"225.44",225,"KARAMAN",NULL,NULL +"225.45",225,"KARS",NULL,NULL +"225.46",225,"KASTAMONU",NULL,NULL +"225.47",225,"KAYSERI",NULL,NULL +"225.48",225,"KILIS",NULL,NULL +"225.49",225,"KIRIKKALE",NULL,NULL +"225.5",225,"AKSARAY",NULL,NULL +"225.50",225,"KIRKLARELI",NULL,NULL +"225.51",225,"KIRSEHIR",NULL,NULL +"225.52",225,"KOCAELI",NULL,NULL +"225.53",225,"KONYA",NULL,NULL +"225.54",225,"KUTAHYA",NULL,NULL +"225.55",225,"MALATYA",NULL,NULL +"225.56",225,"MANISA",NULL,NULL +"225.57",225,"MARDIN",NULL,NULL +"225.58",225,"MERSIN",NULL,NULL +"225.59",225,"MUGLA",NULL,NULL +"225.6",225,"AMASYA",NULL,NULL +"225.60",225,"MUS",NULL,NULL +"225.61",225,"NEVSEHIR",NULL,NULL +"225.62",225,"NIGDE",NULL,NULL +"225.63",225,"ORDU",NULL,NULL +"225.64",225,"OSMANIYE",NULL,NULL +"225.65",225,"RIZE",NULL,NULL +"225.66",225,"SAKARYA",NULL,NULL +"225.67",225,"SAMSUN",NULL,NULL +"225.68",225,"SANLIURFA",NULL,NULL +"225.69",225,"SIIRT",NULL,NULL +"225.7",225,"ANKARA",NULL,NULL +"225.70",225,"SINOP",NULL,NULL +"225.71",225,"SIVAS",NULL,NULL +"225.72",225,"SIRNAK",NULL,NULL +"225.73",225,"TEKIRDAG",NULL,NULL +"225.74",225,"TOKAT",NULL,NULL +"225.75",225,"TRABZON",NULL,NULL +"225.76",225,"TUNCELI",NULL,NULL +"225.77",225,"USAK",NULL,NULL +"225.78",225,"VAN",NULL,NULL +"225.79",225,"YALOVA",NULL,NULL +"225.8",225,"ANTALYA",NULL,NULL +"225.80",225,"YOZGAT",NULL,NULL +"225.81",225,"ZONGULDAK",NULL,NULL +"225.9",225,"ARDAHAN",NULL,NULL +"22.6",22,"HAINAUT","WHT",NULL +"226.1",226,"AHAL_REGION","A",NULL +"226.2",226,"ASHGABAT","S",NULL +"226.3",226,"BALKAN_REGION","B",NULL +"226.4",226,"DASOGUZ_REGION","D",NULL +"226.5",226,"LEBAP_REGION","L",NULL +"226.6",226,"MARY_REGION","M",NULL +"22.7",22,"LIEGE","WLG",NULL +"22.8",22,"LIMBURG","VLI",NULL +"228.1",228,"FUNAFUTI","FUN",NULL +"228.2",228,"NANUMANGA","NMG",NULL +"228.3",228,"NANUMEA","NMA",NULL +"228.4",228,"NIUTAO_ISLAND_COUNCIL","NIT",NULL +"228.5",228,"NUI","NUI",NULL +"228.6",228,"NUKUFETAU","NKF",NULL +"228.7",228,"NUKULAELAE","NKL",NULL +"228.8",228,"VAITUPU","VAI",NULL +"22.9",22,"LUXEMBOURG","WLX",NULL +"229.1",229,"ABIM_DISTRICT",NULL,NULL +"229.10",229,"ARUA_DISTRICT",NULL,NULL +"229.100",229,"NGORA_DISTRICT",NULL,NULL +"229.101",229,"NORTHERN_REGION","N",NULL +"229.102",229,"NTOROKO_DISTRICT",NULL,NULL +"229.103",229,"NTUNGAMO_DISTRICT",NULL,NULL +"229.104",229,"NWOYA_DISTRICT",NULL,NULL +"229.105",229,"OMORO_DISTRICT",NULL,NULL +"229.106",229,"OTUKE_DISTRICT",NULL,NULL +"229.107",229,"OYAM_DISTRICT",NULL,NULL +"229.108",229,"PADER_DISTRICT",NULL,NULL +"229.109",229,"PAKWACH_DISTRICT",NULL,NULL +"229.11",229,"BUDAKA_DISTRICT",NULL,NULL +"229.110",229,"PALLISA_DISTRICT",NULL,NULL +"229.111",229,"RAKAI_DISTRICT",NULL,NULL +"229.112",229,"RUBANDA_DISTRICT",NULL,NULL +"229.113",229,"RUBIRIZI_DISTRICT",NULL,NULL +"229.114",229,"RUKIGA_DISTRICT",NULL,NULL +"229.115",229,"RUKUNGIRI_DISTRICT",NULL,NULL +"229.116",229,"SEMBABULE_DISTRICT",NULL,NULL +"229.117",229,"SERERE_DISTRICT",NULL,NULL +"229.118",229,"SHEEMA_DISTRICT",NULL,NULL +"229.119",229,"SIRONKO_DISTRICT",NULL,NULL +"229.12",229,"BUDUDA_DISTRICT",NULL,NULL +"229.120",229,"SOROTI_DISTRICT",NULL,NULL +"229.121",229,"TORORO_DISTRICT",NULL,NULL +"229.122",229,"WAKISO_DISTRICT",NULL,NULL +"229.123",229,"WESTERN_REGION","W",NULL +"229.124",229,"YUMBE_DISTRICT",NULL,NULL +"229.125",229,"ZOMBO_DISTRICT",NULL,NULL +"229.13",229,"BUGIRI_DISTRICT",NULL,NULL +"229.14",229,"BUHWEJU_DISTRICT",NULL,NULL +"229.15",229,"BUIKWE_DISTRICT",NULL,NULL +"229.16",229,"BUKEDEA_DISTRICT",NULL,NULL +"229.17",229,"BUKOMANSIMBI_DISTRICT",NULL,NULL +"229.18",229,"BUKWO_DISTRICT",NULL,NULL +"229.19",229,"BULAMBULI_DISTRICT",NULL,NULL +"229.2",229,"ADJUMANI_DISTRICT",NULL,NULL +"229.20",229,"BULIISA_DISTRICT",NULL,NULL +"229.21",229,"BUNDIBUGYO_DISTRICT",NULL,NULL +"229.22",229,"BUNYANGABU_DISTRICT",NULL,NULL +"229.23",229,"BUSHENYI_DISTRICT",NULL,NULL +"229.24",229,"BUSIA_DISTRICT",NULL,NULL +"229.25",229,"BUTALEJA_DISTRICT",NULL,NULL +"229.26",229,"BUTAMBALA_DISTRICT",NULL,NULL +"229.27",229,"BUTEBO_DISTRICT",NULL,NULL +"229.28",229,"BUVUMA_DISTRICT",NULL,NULL +"229.29",229,"BUYENDE_DISTRICT",NULL,NULL +"229.3",229,"AGAGO_DISTRICT",NULL,NULL +"229.30",229,"CENTRAL_REGION","C",NULL +"229.31",229,"DOKOLO_DISTRICT",NULL,NULL +"229.32",229,"EASTERN_REGION","E",NULL +"229.33",229,"GOMBA_DISTRICT",NULL,NULL +"229.34",229,"GULU_DISTRICT",NULL,NULL +"229.35",229,"IBANDA_DISTRICT",NULL,NULL +"229.36",229,"IGANGA_DISTRICT",NULL,NULL +"229.37",229,"ISINGIRO_DISTRICT",NULL,NULL +"229.38",229,"JINJA_DISTRICT",NULL,NULL +"229.39",229,"KAABONG_DISTRICT",NULL,NULL +"229.4",229,"ALEBTONG_DISTRICT",NULL,NULL +"229.40",229,"KABALE_DISTRICT",NULL,NULL +"229.41",229,"KABAROLE_DISTRICT",NULL,NULL +"229.42",229,"KABERAMAIDO_DISTRICT",NULL,NULL +"229.43",229,"KAGADI_DISTRICT",NULL,NULL +"229.44",229,"KAKUMIRO_DISTRICT",NULL,NULL +"229.45",229,"KALANGALA_DISTRICT",NULL,NULL +"229.46",229,"KALIRO_DISTRICT",NULL,NULL +"229.47",229,"KALUNGU_DISTRICT",NULL,NULL +"229.48",229,"KAMPALA_DISTRICT",NULL,NULL +"229.49",229,"KAMULI_DISTRICT",NULL,NULL +"229.5",229,"AMOLATAR_DISTRICT",NULL,NULL +"229.50",229,"KAMWENGE_DISTRICT",NULL,NULL +"229.51",229,"KANUNGU_DISTRICT",NULL,NULL +"229.52",229,"KAPCHORWA_DISTRICT",NULL,NULL +"229.53",229,"KASESE_DISTRICT",NULL,NULL +"229.54",229,"KATAKWI_DISTRICT",NULL,NULL +"229.55",229,"KAYUNGA_DISTRICT",NULL,NULL +"229.56",229,"KIBAALE_DISTRICT",NULL,NULL +"229.57",229,"KIBOGA_DISTRICT",NULL,NULL +"229.58",229,"KIBUKU_DISTRICT",NULL,NULL +"229.59",229,"KIRUHURA_DISTRICT",NULL,NULL +"229.6",229,"AMUDAT_DISTRICT",NULL,NULL +"229.60",229,"KIRYANDONGO_DISTRICT",NULL,NULL +"229.61",229,"KISORO_DISTRICT",NULL,NULL +"229.62",229,"KITGUM_DISTRICT",NULL,NULL +"229.63",229,"KOBOKO_DISTRICT",NULL,NULL +"229.64",229,"KOLE_DISTRICT",NULL,NULL +"229.65",229,"KOTIDO_DISTRICT",NULL,NULL +"229.66",229,"KUMI_DISTRICT",NULL,NULL +"229.67",229,"KWEEN_DISTRICT",NULL,NULL +"229.68",229,"KYANKWANZI_DISTRICT",NULL,NULL +"229.69",229,"KYEGEGWA_DISTRICT",NULL,NULL +"229.7",229,"AMURIA_DISTRICT",NULL,NULL +"229.70",229,"KYENJOJO_DISTRICT",NULL,NULL +"229.71",229,"KYOTERA_DISTRICT",NULL,NULL +"229.72",229,"LAMWO_DISTRICT",NULL,NULL +"229.73",229,"LIRA_DISTRICT",NULL,NULL +"229.74",229,"LUUKA_DISTRICT",NULL,NULL +"229.75",229,"LUWERO_DISTRICT",NULL,NULL +"229.76",229,"LWENGO_DISTRICT",NULL,NULL +"229.77",229,"LYANTONDE_DISTRICT",NULL,NULL +"229.78",229,"MANAFWA_DISTRICT",NULL,NULL +"229.79",229,"MARACHA_DISTRICT",NULL,NULL +"229.8",229,"AMURU_DISTRICT",NULL,NULL +"229.80",229,"MASAKA_DISTRICT",NULL,NULL +"229.81",229,"MASINDI_DISTRICT",NULL,NULL +"229.82",229,"MAYUGE_DISTRICT",NULL,NULL +"229.83",229,"MBALE_DISTRICT",NULL,NULL +"229.84",229,"MBARARA_DISTRICT",NULL,NULL +"229.85",229,"MITOOMA_DISTRICT",NULL,NULL +"229.86",229,"MITYANA_DISTRICT",NULL,NULL +"229.87",229,"MOROTO_DISTRICT",NULL,NULL +"229.88",229,"MOYO_DISTRICT",NULL,NULL +"229.89",229,"MPIGI_DISTRICT",NULL,NULL +"229.9",229,"APAC_DISTRICT",NULL,NULL +"229.90",229,"MUBENDE_DISTRICT",NULL,NULL +"229.91",229,"MUKONO_DISTRICT",NULL,NULL +"229.92",229,"NAKAPIRIPIRIT_DISTRICT",NULL,NULL +"229.93",229,"NAKASEKE_DISTRICT",NULL,NULL +"229.94",229,"NAKASONGOLA_DISTRICT",NULL,NULL +"229.95",229,"NAMAYINGO_DISTRICT",NULL,NULL +"229.96",229,"NAMISINDWA_DISTRICT",NULL,NULL +"229.97",229,"NAMUTUMBA_DISTRICT",NULL,NULL +"229.98",229,"NAPAK_DISTRICT",NULL,NULL +"229.99",229,"NEBBI_DISTRICT",NULL,NULL +"230.1",230,"AUTONOMOUS_REPUBLIC_OF_CRIMEA",NULL,NULL +"230.10",230,"KHMELNYTSKA_OBLAST",NULL,NULL +"230.11",230,"KIROVOHRADSKA_OBLAST",NULL,NULL +"230.12",230,"KYIV",NULL,NULL +"230.13",230,"KYIVSKA_OBLAST",NULL,NULL +"230.14",230,"LUHANSKA_OBLAST",NULL,NULL +"230.15",230,"LVIVSKA_OBLAST",NULL,NULL +"230.16",230,"MYKOLAIVSKA_OBLAST",NULL,NULL +"230.17",230,"ODESKA_OBLAST",NULL,NULL +"230.18",230,"POLTAVSKA_OBLAST",NULL,NULL +"230.19",230,"RIVNENSKA_OBLAST",NULL,NULL +"230.2",230,"CHERKASKA_OBLAST",NULL,NULL +"230.20",230,"SUMSKA_OBLAST",NULL,NULL +"230.21",230,"TERNOPILSKA_OBLAST",NULL,NULL +"230.22",230,"VINNYTSKA_OBLAST",NULL,NULL +"230.23",230,"VOLYNSKA_OBLAST",NULL,NULL +"230.24",230,"ZAKARPATSKA_OBLAST",NULL,NULL +"230.25",230,"ZAPORIZKA_OBLAST",NULL,NULL +"230.26",230,"ZHYTOMYRSKA_OBLAST",NULL,NULL +"230.3",230,"CHERNIHIVSKA_OBLAST",NULL,NULL +"230.4",230,"CHERNIVETSKA_OBLAST",NULL,NULL +"230.5",230,"DNIPROPETROVSKA_OBLAST",NULL,NULL +"230.6",230,"DONETSKA_OBLAST",NULL,NULL +"230.7",230,"IVANO-FRANKIVSKA_OBLAST",NULL,NULL +"230.8",230,"KHARKIVSKA_OBLAST",NULL,NULL +"230.9",230,"KHERSONSKA_OBLAST",NULL,NULL +"23.1",23,"BELIZE_DISTRICT","BZ",NULL +"231.1",231,"ABU_DHABI_EMIRATE","AZ",NULL +"231.2",231,"AJMAN_EMIRATE","AJ",NULL +"231.3",231,"DUBAI","DU",NULL +"231.4",231,"FUJAIRAH","FU",NULL +"231.5",231,"RAS_AL-KHAIMAH","RK",NULL +"231.6",231,"SHARJAH_EMIRATE","SH",NULL +"231.7",231,"UMM_AL-QUWAIN","UQ",NULL +"23.2",23,"CAYO_DISTRICT","CY",NULL +"232.1",232,"ABERDEEN","ABE",NULL +"232.10",232,"ARMAGH,_BANBRIDGE_AND_CRAIGAVON","ABC",NULL +"232.100",232,"HAMPSHIRE","HAM",NULL +"232.101",232,"HARTLEPOOL","HPL",NULL +"232.102",232,"HEREFORDSHIRE","HEF",NULL +"232.103",232,"HERTFORDSHIRE","HRT",NULL +"232.104",232,"HIGHLAND","HLD",NULL +"232.105",232,"INVERCLYDE","IVC",NULL +"232.106",232,"ISLE_OF_WIGHT","IOW",NULL +"232.107",232,"ISLES_OF_SCILLY","IOS",NULL +"232.108",232,"KENT","KEN",NULL +"232.109",232,"KIRKLEES","KIR",NULL +"232.11",232,"ASCENSION_ISLAND","SH-AC",NULL +"232.110",232,"KNOWSLEY","KWL",NULL +"232.111",232,"LANCASHIRE","LAN",NULL +"232.112",232,"LARNE_BOROUGH_COUNCIL","LRN",NULL +"232.113",232,"LEEDS","LDS",NULL +"232.114",232,"LEICESTERSHIRE","LEC",NULL +"232.115",232,"LIMAVADY_BOROUGH_COUNCIL","LMV",NULL +"232.116",232,"LINCOLNSHIRE","LIN",NULL +"232.117",232,"LISBURN_AND_CASTLEREAGH","LBC",NULL +"232.118",232,"LISBURN_CITY_COUNCIL","LSB",NULL +"232.119",232,"LIVERPOOL","LIV",NULL +"232.12",232,"BALLYMENA_BOROUGH","BLA",NULL +"232.120",232,"LONDON_BOROUGH_OF_BARKING_AND_DAGENHAM","BDG",NULL +"232.121",232,"LONDON_BOROUGH_OF_BARNET","BNE",NULL +"232.122",232,"LONDON_BOROUGH_OF_BEXLEY","BEX",NULL +"232.123",232,"LONDON_BOROUGH_OF_BRENT","BEN",NULL +"232.124",232,"LONDON_BOROUGH_OF_BROMLEY","BRY",NULL +"232.125",232,"LONDON_BOROUGH_OF_CAMDEN","CMD",NULL +"232.126",232,"LONDON_BOROUGH_OF_CROYDON","CRY",NULL +"232.127",232,"LONDON_BOROUGH_OF_EALING","EAL",NULL +"232.128",232,"LONDON_BOROUGH_OF_ENFIELD","ENF",NULL +"232.129",232,"LONDON_BOROUGH_OF_HACKNEY","HCK",NULL +"232.13",232,"BALLYMONEY","BLY",NULL +"232.130",232,"LONDON_BOROUGH_OF_HAMMERSMITH_AND_FULHAM","HMF",NULL +"232.131",232,"LONDON_BOROUGH_OF_HARINGEY","HRY",NULL +"232.132",232,"LONDON_BOROUGH_OF_HARROW","HRW",NULL +"232.133",232,"LONDON_BOROUGH_OF_HAVERING","HAV",NULL +"232.134",232,"LONDON_BOROUGH_OF_HILLINGDON","HIL",NULL +"232.135",232,"LONDON_BOROUGH_OF_HOUNSLOW","HNS",NULL +"232.136",232,"LONDON_BOROUGH_OF_ISLINGTON","ISL",NULL +"232.137",232,"LONDON_BOROUGH_OF_LAMBETH","LBH",NULL +"232.138",232,"LONDON_BOROUGH_OF_LEWISHAM","LEW",NULL +"232.139",232,"LONDON_BOROUGH_OF_MERTON","MRT",NULL +"232.14",232,"BANBRIDGE","BNB",NULL +"232.140",232,"LONDON_BOROUGH_OF_NEWHAM","NWM",NULL +"232.141",232,"LONDON_BOROUGH_OF_REDBRIDGE","RDB",NULL +"232.142",232,"LONDON_BOROUGH_OF_RICHMOND_UPON_THAMES","RIC",NULL +"232.143",232,"LONDON_BOROUGH_OF_SOUTHWARK","SWK",NULL +"232.144",232,"LONDON_BOROUGH_OF_SUTTON","STN",NULL +"232.145",232,"LONDON_BOROUGH_OF_TOWER_HAMLETS","TWH",NULL +"232.146",232,"LONDON_BOROUGH_OF_WALTHAM_FOREST","WFT",NULL +"232.147",232,"LONDON_BOROUGH_OF_WANDSWORTH","WND",NULL +"232.148",232,"MAGHERAFELT_DISTRICT_COUNCIL","MFT",NULL +"232.149",232,"MANCHESTER","MAN",NULL +"232.15",232,"BARNSLEY","BNS",NULL +"232.150",232,"MEDWAY","MDW",NULL +"232.151",232,"MERTHYR_TYDFIL_COUNTY_BOROUGH","MTY",NULL +"232.152",232,"METROPOLITAN_BOROUGH_OF_WIGAN","WGN",NULL +"232.153",232,"MID_AND_EAST_ANTRIM","MEA",NULL +"232.154",232,"MID_ULSTER","MUL",NULL +"232.155",232,"MIDDLESBROUGH","MDB",NULL +"232.156",232,"MIDLOTHIAN","MLN",NULL +"232.157",232,"MILTON_KEYNES","MIK",NULL +"232.158",232,"MONMOUTHSHIRE","MON",NULL +"232.159",232,"MORAY","MRY",NULL +"232.16",232,"BATH_AND_NORTH_EAST_SOMERSET","BAS",NULL +"232.160",232,"MOYLE_DISTRICT_COUNCIL","MYL",NULL +"232.161",232,"NEATH_PORT_TALBOT_COUNTY_BOROUGH","NTL",NULL +"232.162",232,"NEWCASTLE_UPON_TYNE","NET",NULL +"232.163",232,"NEWPORT","NWP",NULL +"232.164",232,"NEWRY_AND_MOURNE_DISTRICT_COUNCIL","NYM",NULL +"232.165",232,"NEWRY,_MOURNE_AND_DOWN","NMD",NULL +"232.166",232,"NEWTOWNABBEY_BOROUGH_COUNCIL","NTA",NULL +"232.167",232,"NORFOLK","NFK",NULL +"232.168",232,"NORTH_AYRSHIRE","NAY",NULL +"232.169",232,"NORTH_DOWN_BOROUGH_COUNCIL","NDN",NULL +"232.17",232,"BEDFORD","BDF",NULL +"232.170",232,"NORTH_EAST_LINCOLNSHIRE","NEL",NULL +"232.171",232,"NORTH_LANARKSHIRE","NLK",NULL +"232.172",232,"NORTH_LINCOLNSHIRE","NLN",NULL +"232.173",232,"NORTH_SOMERSET","NSM",NULL +"232.174",232,"NORTH_TYNESIDE","NTY",NULL +"232.175",232,"NORTH_YORKSHIRE","NYK",NULL +"232.176",232,"NORTHAMPTONSHIRE","NTH",NULL +"232.177",232,"NORTHERN_IRELAND","NIR",NULL +"232.178",232,"NORTHUMBERLAND","NBL",NULL +"232.179",232,"NOTTINGHAMSHIRE","NTT",NULL +"232.18",232,"BELFAST_DISTRICT","BFS",NULL +"232.180",232,"OLDHAM","OLD",NULL +"232.181",232,"OMAGH_DISTRICT_COUNCIL","OMH",NULL +"232.182",232,"ORKNEY_ISLANDS","ORK",NULL +"232.183",232,"OUTER_HEBRIDES","ELS",NULL +"232.184",232,"OXFORDSHIRE","OXF",NULL +"232.185",232,"PEMBROKESHIRE","PEM",NULL +"232.186",232,"PERTH_AND_KINROSS","PKN",NULL +"232.187",232,"POOLE","POL",NULL +"232.188",232,"POWYS","POW",NULL +"232.189",232,"READING","RDG",NULL +"232.19",232,"BIRMINGHAM","BIR",NULL +"232.190",232,"REDCAR_AND_CLEVELAND","RCC",NULL +"232.191",232,"RENFREWSHIRE","RFW",NULL +"232.192",232,"RHONDDA_CYNON_TAF","RCT",NULL +"232.193",232,"ROCHDALE","RCH",NULL +"232.194",232,"ROTHERHAM","ROT",NULL +"232.195",232,"ROYAL_BOROUGH_OF_GREENWICH","GRE",NULL +"232.196",232,"ROYAL_BOROUGH_OF_KENSINGTON_AND_CHELSEA","KEC",NULL +"232.197",232,"ROYAL_BOROUGH_OF_KINGSTON_UPON_THAMES","KTT",NULL +"232.198",232,"RUTLAND","RUT",NULL +"232.199",232,"SAINT_HELENA","SH-HL",NULL +"232.2",232,"ABERDEENSHIRE","ABD",NULL +"232.20",232,"BLACKBURN_WITH_DARWEN","BBD",NULL +"232.200",232,"SALFORD","SLF",NULL +"232.201",232,"SANDWELL","SAW",NULL +"232.202",232,"SCOTLAND","SCT",NULL +"232.203",232,"SCOTTISH_BORDERS","SCB",NULL +"232.204",232,"SEFTON","SFT",NULL +"232.205",232,"SHEFFIELD","SHF",NULL +"232.206",232,"SHETLAND_ISLANDS","ZET",NULL +"232.207",232,"SHROPSHIRE","SHR",NULL +"232.208",232,"SLOUGH","SLG",NULL +"232.209",232,"SOLIHULL","SOL",NULL +"232.21",232,"BLACKPOOL","BPL",NULL +"232.210",232,"SOMERSET","SOM",NULL +"232.211",232,"SOUTH_AYRSHIRE","SAY",NULL +"232.212",232,"SOUTH_GLOUCESTERSHIRE","SGC",NULL +"232.213",232,"SOUTH_LANARKSHIRE","SLK",NULL +"232.214",232,"SOUTH_TYNESIDE","STY",NULL +"232.215",232,"SOUTHEND-ON-SEA","SOS",NULL +"232.216",232,"ST_HELENS","SHN",NULL +"232.217",232,"STAFFORDSHIRE","STS",NULL +"232.218",232,"STIRLING","STG",NULL +"232.219",232,"STOCKPORT","SKP",NULL +"232.22",232,"BLAENAU_GWENT_COUNTY_BOROUGH","BGW",NULL +"232.220",232,"STOCKTON-ON-TEES","STT",NULL +"232.221",232,"STRABANE_DISTRICT_COUNCIL","STB",NULL +"232.222",232,"SUFFOLK","SFK",NULL +"232.223",232,"SURREY","SRY",NULL +"232.224",232,"SWINDON","SWD",NULL +"232.225",232,"TAMESIDE","TAM",NULL +"232.226",232,"TELFORD_AND_WREKIN","TFW",NULL +"232.227",232,"THURROCK","THR",NULL +"232.228",232,"TORBAY","TOB",NULL +"232.229",232,"TORFAEN","TOF",NULL +"232.23",232,"BOLTON","BOL",NULL +"232.230",232,"TRAFFORD","TRF",NULL +"232.231",232,"UNITED_KINGDOM","UKM",NULL +"232.232",232,"VALE_OF_GLAMORGAN","VGL",NULL +"232.233",232,"WAKEFIELD","WKF",NULL +"232.234",232,"WALES","WLS",NULL +"232.235",232,"WALSALL","WLL",NULL +"232.236",232,"WARRINGTON","WRT",NULL +"232.237",232,"WARWICKSHIRE","WAR",NULL +"232.238",232,"WEST_BERKSHIRE","WBK",NULL +"232.239",232,"WEST_DUNBARTONSHIRE","WDU",NULL +"232.24",232,"BOURNEMOUTH","BMH",NULL +"232.240",232,"WEST_LOTHIAN","WLN",NULL +"232.241",232,"WEST_SUSSEX","WSX",NULL +"232.242",232,"WILTSHIRE","WIL",NULL +"232.243",232,"WINDSOR_AND_MAIDENHEAD","WNM",NULL +"232.244",232,"WIRRAL","WRL",NULL +"232.245",232,"WOKINGHAM","WOK",NULL +"232.246",232,"WORCESTERSHIRE","WOR",NULL +"232.247",232,"WREXHAM_COUNTY_BOROUGH","WRX",NULL +"232.25",232,"BRACKNELL_FOREST","BRC",NULL +"232.26",232,"BRADFORD","BRD",NULL +"232.27",232,"BRIDGEND_COUNTY_BOROUGH","BGE",NULL +"232.28",232,"BRIGHTON_AND_HOVE","BNH",NULL +"232.29",232,"BUCKINGHAMSHIRE","BKM",NULL +"232.3",232,"ANGUS","ANS",NULL +"232.30",232,"BURY","BUR",NULL +"232.31",232,"CAERPHILLY_COUNTY_BOROUGH","CAY",NULL +"232.32",232,"CALDERDALE","CLD",NULL +"232.33",232,"CAMBRIDGESHIRE","CAM",NULL +"232.34",232,"CARMARTHENSHIRE","CMN",NULL +"232.35",232,"CARRICKFERGUS_BOROUGH_COUNCIL","CKF",NULL +"232.36",232,"CASTLEREAGH","CSR",NULL +"232.37",232,"CAUSEWAY_COAST_AND_GLENS","CCG",NULL +"232.38",232,"CENTRAL_BEDFORDSHIRE","CBF",NULL +"232.39",232,"CEREDIGION","CGN",NULL +"232.4",232,"ANTRIM","ANT",NULL +"232.40",232,"CHESHIRE_EAST","CHE",NULL +"232.41",232,"CHESHIRE_WEST_AND_CHESTER","CHW",NULL +"232.42",232,"CITY_AND_COUNTY_OF_CARDIFF","CRF",NULL +"232.43",232,"CITY_AND_COUNTY_OF_SWANSEA","SWA",NULL +"232.44",232,"CITY_OF_BRISTOL","BST",NULL +"232.45",232,"CITY_OF_DERBY","DER",NULL +"232.46",232,"CITY_OF_KINGSTON_UPON_HULL","KHL",NULL +"232.47",232,"CITY_OF_LEICESTER","LCE",NULL +"232.48",232,"CITY_OF_LONDON","LND",NULL +"232.49",232,"CITY_OF_NOTTINGHAM","NGM",NULL +"232.5",232,"ANTRIM_AND_NEWTOWNABBEY","ANN",NULL +"232.50",232,"CITY_OF_PETERBOROUGH","PTE",NULL +"232.51",232,"CITY_OF_PLYMOUTH","PLY",NULL +"232.52",232,"CITY_OF_PORTSMOUTH","POR",NULL +"232.53",232,"CITY_OF_SOUTHAMPTON","STH",NULL +"232.54",232,"CITY_OF_STOKE-ON-TRENT","STE",NULL +"232.55",232,"CITY_OF_SUNDERLAND","SND",NULL +"232.56",232,"CITY_OF_WESTMINSTER","WSM",NULL +"232.57",232,"CITY_OF_WOLVERHAMPTON","WLV",NULL +"232.58",232,"CITY_OF_YORK","YOR",NULL +"232.59",232,"CLACKMANNANSHIRE","CLK",NULL +"232.6",232,"ARDS","ARD",NULL +"232.60",232,"COLERAINE_BOROUGH_COUNCIL","CLR",NULL +"232.61",232,"CONWY_COUNTY_BOROUGH","CWY",NULL +"232.62",232,"COOKSTOWN_DISTRICT_COUNCIL","CKT",NULL +"232.63",232,"CORNWALL","CON",NULL +"232.64",232,"COUNTY_DURHAM","DUR",NULL +"232.65",232,"COVENTRY","COV",NULL +"232.66",232,"CRAIGAVON_BOROUGH_COUNCIL","CGV",NULL +"232.67",232,"CUMBRIA","CMA",NULL +"232.68",232,"DARLINGTON","DAL",NULL +"232.69",232,"DENBIGHSHIRE","DEN",NULL +"232.7",232,"ARDS_AND_NORTH_DOWN","AND",NULL +"232.70",232,"DERBYSHIRE","DBY",NULL +"232.71",232,"DERRY_CITY_AND_STRABANE","DRS",NULL +"232.72",232,"DERRY_CITY_COUNCIL","DRY",NULL +"232.73",232,"DEVON","DEV",NULL +"232.74",232,"DONCASTER","DNC",NULL +"232.75",232,"DORSET","DOR",NULL +"232.76",232,"DOWN_DISTRICT_COUNCIL","DOW",NULL +"232.77",232,"DUDLEY","DUD",NULL +"232.78",232,"DUMFRIES_AND_GALLOWAY","DGY",NULL +"232.79",232,"DUNDEE","DND",NULL +"232.8",232,"ARGYLL_AND_BUTE","AGB",NULL +"232.80",232,"DUNGANNON_AND_SOUTH_TYRONE_BOROUGH_COUNCIL","DGN",NULL +"232.81",232,"EAST_AYRSHIRE","EAY",NULL +"232.82",232,"EAST_DUNBARTONSHIRE","EDU",NULL +"232.83",232,"EAST_LOTHIAN","ELN",NULL +"232.84",232,"EAST_RENFREWSHIRE","ERW",NULL +"232.85",232,"EAST_RIDING_OF_YORKSHIRE","ERY",NULL +"232.86",232,"EAST_SUSSEX","ESX",NULL +"232.87",232,"EDINBURGH","EDH",NULL +"232.88",232,"ENGLAND","ENG",NULL +"232.89",232,"ESSEX","ESS",NULL +"232.9",232,"ARMAGH_CITY_AND_DISTRICT_COUNCIL","ARM",NULL +"232.90",232,"FALKIRK","FAL",NULL +"232.91",232,"FERMANAGH_AND_OMAGH","FMO",NULL +"232.92",232,"FERMANAGH_DISTRICT_COUNCIL","FER",NULL +"232.93",232,"FIFE","FIF",NULL +"232.94",232,"FLINTSHIRE","FLN",NULL +"232.95",232,"GATESHEAD","GAT",NULL +"232.96",232,"GLASGOW","GLG",NULL +"232.97",232,"GLOUCESTERSHIRE","GLS",NULL +"232.98",232,"GWYNEDD","GWN",NULL +"232.99",232,"HALTON","HAL",NULL +"23.3",23,"COROZAL_DISTRICT","CZL",NULL +"233.1",233,"ALABAMA","AL",NULL +"233.10",233,"DELAWARE","DE",NULL +"233.11",233,"DISTRICT_OF_COLUMBIA","DC",NULL +"233.12",233,"FLORIDA","FL",NULL +"233.13",233,"GEORGIA","GA",NULL +"233.14",233,"GUAM","GU",NULL +"233.15",233,"HAWAII","HI",NULL +"233.16",233,"HOWLAND_ISLAND","UM-84",NULL +"233.17",233,"IDAHO","ID",NULL +"233.18",233,"ILLINOIS","IL",NULL +"233.19",233,"INDIANA","IN",NULL +"233.2",233,"ALASKA","AK",NULL +"233.20",233,"IOWA","IA",NULL +"233.21",233,"JARVIS_ISLAND","UM-86",NULL +"233.22",233,"JOHNSTON_ATOLL","UM-67",NULL +"233.23",233,"KANSAS","KS",NULL +"233.24",233,"KENTUCKY","KY",NULL +"233.25",233,"KINGMAN_REEF","UM-89",NULL +"233.26",233,"LOUISIANA","LA",NULL +"233.27",233,"MAINE","ME",NULL +"233.28",233,"MARYLAND","MD",NULL +"233.29",233,"MASSACHUSETTS","MA",NULL +"233.3",233,"AMERICAN_SAMOA","AS",NULL +"233.30",233,"MICHIGAN","MI",NULL +"233.31",233,"MIDWAY_ATOLL","UM-71",NULL +"233.32",233,"MINNESOTA","MN",NULL +"233.33",233,"MISSISSIPPI","MS",NULL +"233.34",233,"MISSOURI","MO",NULL +"233.35",233,"MONTANA","MT",NULL +"233.36",233,"NAVASSA_ISLAND","UM-76",NULL +"233.37",233,"NEBRASKA","NE",NULL +"233.38",233,"NEVADA","NV",NULL +"233.39",233,"NEW_HAMPSHIRE","NH",NULL +"233.4",233,"ARIZONA","AZ",NULL +"233.40",233,"NEW_JERSEY","NJ",NULL +"233.41",233,"NEW_MEXICO","NM",NULL +"233.42",233,"NEW_YORK","NY",NULL +"233.43",233,"NORTH_CAROLINA","NC",NULL +"233.44",233,"NORTH_DAKOTA","ND",NULL +"233.45",233,"NORTHERN_MARIANA_ISLANDS","MP",NULL +"233.46",233,"OHIO","OH",NULL +"233.47",233,"OKLAHOMA","OK",NULL +"233.48",233,"OREGON","OR",NULL +"233.49",233,"PALMYRA_ATOLL","UM-95",NULL +"233.5",233,"ARKANSAS","AR",NULL +"233.50",233,"PENNSYLVANIA","PA",NULL +"233.51",233,"PUERTO_RICO","PR",NULL +"233.52",233,"RHODE_ISLAND","RI",NULL +"233.53",233,"SOUTH_CAROLINA","SC",NULL +"233.54",233,"SOUTH_DAKOTA","SD",NULL +"233.55",233,"TENNESSEE","TN",NULL +"233.56",233,"TEXAS","TX",NULL +"233.57",233,"UNITED_STATES_MINOR_OUTLYING_ISLANDS","UM",NULL +"233.58",233,"UNITED_STATES_VIRGIN_ISLANDS","VI",NULL +"233.59",233,"UTAH","UT",NULL +"233.6",233,"BAKER_ISLAND","UM-81",NULL +"233.60",233,"VERMONT","VT",NULL +"233.61",233,"VIRGINIA","VA",NULL +"233.62",233,"WAKE_ISLAND","UM-79",NULL +"233.63",233,"WASHINGTON","WA",NULL +"233.64",233,"WEST_VIRGINIA","WV",NULL +"233.65",233,"WISCONSIN","WI",NULL +"233.66",233,"WYOMING","WY",NULL +"233.7",233,"CALIFORNIA","CA",NULL +"233.8",233,"COLORADO","CO",NULL +"233.9",233,"CONNECTICUT","CT",NULL +"23.4",23,"ORANGE_WALK_DISTRICT","OW",NULL +"234.1",234,"BAKER_ISLAND",NULL,NULL +"234.2",234,"HOWLAND_ISLAND",NULL,NULL +"234.3",234,"JARVIS_ISLAND",NULL,NULL +"234.4",234,"JOHNSTON_ATOLL",NULL,NULL +"234.5",234,"KINGMAN_REEF",NULL,NULL +"234.6",234,"MIDWAY_ISLANDS",NULL,NULL +"234.7",234,"NAVASSA_ISLAND",NULL,NULL +"234.8",234,"PALMYRA_ATOLL",NULL,NULL +"234.9",234,"WAKE_ISLAND",NULL,NULL +"23.5",23,"STANN_CREEK_DISTRICT","SC",NULL +"235.1",235,"ARTIGAS_DEPARTMENT","AR",NULL +"235.10",235,"MONTEVIDEO_DEPARTMENT","MO",NULL +"235.11",235,"PAYSANDU_DEPARTMENT","PA",NULL +"235.12",235,"RIO_NEGRO_DEPARTMENT","RN",NULL +"235.13",235,"RIVERA_DEPARTMENT","RV",NULL +"235.14",235,"ROCHA_DEPARTMENT","RO",NULL +"235.15",235,"SALTO_DEPARTMENT","SA",NULL +"235.16",235,"SAN_JOSE_DEPARTMENT","SJ",NULL +"235.17",235,"SORIANO_DEPARTMENT","SO",NULL +"235.18",235,"TACUAREMBO_DEPARTMENT","TA",NULL +"235.19",235,"TREINTA_Y_TRES_DEPARTMENT","TT",NULL +"235.2",235,"CANELONES_DEPARTMENT","CA",NULL +"235.3",235,"CERRO_LARGO_DEPARTMENT","CL",NULL +"235.4",235,"COLONIA_DEPARTMENT","CO",NULL +"235.5",235,"DURAZNO_DEPARTMENT","DU",NULL +"235.6",235,"FLORES_DEPARTMENT","FS",NULL +"235.7",235,"FLORIDA_DEPARTMENT","FD",NULL +"235.8",235,"LAVALLEJA_DEPARTMENT","LA",NULL +"235.9",235,"MALDONADO_DEPARTMENT","MA",NULL +"23.6",23,"TOLEDO_DISTRICT","TOL",NULL +"236.1",236,"ANDIJAN_REGION","AN",NULL +"236.10",236,"SIRDARYO_REGION","SI",NULL +"236.11",236,"SURXONDARYO_REGION","SU",NULL +"236.12",236,"TASHKENT","TK",NULL +"236.13",236,"TASHKENT_REGION","TO",NULL +"236.14",236,"XORAZM_REGION","XO",NULL +"236.2",236,"BUKHARA_REGION","BU",NULL +"236.3",236,"FERGANA_REGION","FA",NULL +"236.4",236,"JIZZAKH_REGION","JI",NULL +"236.5",236,"KARAKALPAKSTAN","QR",NULL +"236.6",236,"NAMANGAN_REGION","NG",NULL +"236.7",236,"NAVOIY_REGION","NW",NULL +"236.8",236,"QASHQADARYO_REGION","QA",NULL +"236.9",236,"SAMARQAND_REGION","SA",NULL +"237.1",237,"MALAMPA","MAP",NULL +"237.2",237,"PENAMA","PAM",NULL +"237.3",237,"SANMA","SAM",NULL +"237.4",237,"SHEFA","SEE",NULL +"237.5",237,"TAFEA","TAE",NULL +"237.6",237,"TORBA","TOB",NULL +"240.1",240,"AN_GIANG",NULL,NULL +"240.10",240,"BINH_PHUOC",NULL,NULL +"240.11",240,"BINH_THUAN",NULL,NULL +"240.12",240,"CA_MAU",NULL,NULL +"240.13",240,"CAN_THO","CT",NULL +"240.14",240,"CAO_BANG",NULL,NULL +"240.15",240,"DA_NANG","DN",NULL +"240.16",240,"DAK_LAK",NULL,NULL +"240.17",240,"DAK_NONG",NULL,NULL +"240.18",240,"DIEN_BIEN",NULL,NULL +"240.19",240,"DONG_NAI",NULL,NULL +"240.2",240,"BA_RIA-VUNG_TAU",NULL,NULL +"240.20",240,"DONG_THAP",NULL,NULL +"240.21",240,"GIA_LAI",NULL,NULL +"240.22",240,"HA_GIANG",NULL,NULL +"240.23",240,"HA_NAM",NULL,NULL +"240.24",240,"HA_NOI","HN",NULL +"240.25",240,"HA_TINH",NULL,NULL +"240.26",240,"HAI_DUONG",NULL,NULL +"240.27",240,"HAI_PHONG","HP",NULL +"240.28",240,"HAU_GIANG",NULL,NULL +"240.29",240,"HO_CHI_MINH","SG",NULL +"240.3",240,"BAC_GIANG",NULL,NULL +"240.30",240,"HOA_BINH",NULL,NULL +"240.31",240,"HUNG_YEN",NULL,NULL +"240.32",240,"KHANH_HOA",NULL,NULL +"240.33",240,"KIEN_GIANG",NULL,NULL +"240.34",240,"KON_TUM",NULL,NULL +"240.35",240,"LAI_CHAU",NULL,NULL +"240.36",240,"LAM_DONG",NULL,NULL +"240.37",240,"LANG_SON",NULL,NULL +"240.38",240,"LAO_CAI",NULL,NULL +"240.39",240,"LONG_AN",NULL,NULL +"240.4",240,"BAC_KAN",NULL,NULL +"240.40",240,"NAM_DINH",NULL,NULL +"240.41",240,"NGHE_AN",NULL,NULL +"240.42",240,"NINH_BINH",NULL,NULL +"240.43",240,"NINH_THUAN",NULL,NULL +"240.44",240,"PHU_THO",NULL,NULL +"240.45",240,"PHU_YEN",NULL,NULL +"240.46",240,"QUANG_BINH",NULL,NULL +"240.47",240,"QUANG_NAM",NULL,NULL +"240.48",240,"QUANG_NGAI",NULL,NULL +"240.49",240,"QUANG_NINH",NULL,NULL +"240.5",240,"BAC_LIEU",NULL,NULL +"240.50",240,"QUANG_TRI",NULL,NULL +"240.51",240,"SOC_TRANG",NULL,NULL +"240.52",240,"SON_LA",NULL,NULL +"240.53",240,"TAY_NINH",NULL,NULL +"240.54",240,"THAI_BINH",NULL,NULL +"240.55",240,"THAI_NGUYEN",NULL,NULL +"240.56",240,"THANH_HOA",NULL,NULL +"240.57",240,"THUA_THIEN-HUE",NULL,NULL +"240.58",240,"TIEN_GIANG",NULL,NULL +"240.59",240,"TRA_VINH",NULL,NULL +"240.6",240,"BAC_NINH",NULL,NULL +"240.60",240,"TUYEN_QUANG",NULL,NULL +"240.61",240,"VINH_LONG",NULL,NULL +"240.62",240,"VINH_PHUC",NULL,NULL +"240.63",240,"YEN_BAI",NULL,NULL +"240.7",240,"BEN_TRE",NULL,NULL +"240.8",240,"BINH_DUONG",NULL,NULL +"240.9",240,"BINH_DINH",NULL,NULL +"24.1",24,"ALIBORI_DEPARTMENT","AL",NULL +"24.10",24,"OUEME_DEPARTMENT","OU",NULL +"24.11",24,"PLATEAU_DEPARTMENT","PL",NULL +"24.12",24,"ZOU_DEPARTMENT","ZO",NULL +"24.2",24,"ATAKORA_DEPARTMENT","AK",NULL +"242.1",242,"SAINT_CROIX","SC",NULL +"242.2",242,"SAINT_JOHN","SJ",NULL +"242.3",242,"SAINT_THOMAS","ST",NULL +"24.3",24,"ATLANTIQUE_DEPARTMENT","AQ",NULL +"24.4",24,"BORGOU_DEPARTMENT","BO",NULL +"24.5",24,"COLLINES_DEPARTMENT","CO",NULL +"245.1",245,"'ADAN","AD",NULL +"245.10",245,"DHAMAR","DH",NULL +"245.11",245,"HADHRAMAUT","HD",NULL +"245.12",245,"HAJJAH","HJ",NULL +"245.13",245,"IBB","IB",NULL +"245.14",245,"LAHIJ","LA",NULL +"245.15",245,"MA'RIB","MA",NULL +"245.16",245,"RAYMAH","RA",NULL +"245.17",245,"SAADA","SD",NULL +"245.18",245,"SANA'A","SN",NULL +"245.19",245,"SHABWAH","SH",NULL +"245.2",245,"'AMRAN","AM",NULL +"245.20",245,"SOCOTRA","SU",NULL +"245.21",245,"TA'IZZ","TA",NULL +"245.3",245,"ABYAN","AB",NULL +"245.4",245,"AL_BAYDA'","BA",NULL +"245.5",245,"AL_HUDAYDAH","HU",NULL +"245.6",245,"AL_JAWF","JA",NULL +"245.7",245,"AL_MAHRAH","MR",NULL +"245.8",245,"AL_MAHWIT","MW",NULL +"245.9",245,"AMANAT_AL_ASIMAH","SA",NULL +"24.6",24,"DONGA_DEPARTMENT","DO",NULL +"246.1",246,"CENTRAL_PROVINCE",NULL,NULL +"246.10",246,"WESTERN_PROVINCE",NULL,NULL +"246.2",246,"COPPERBELT_PROVINCE",NULL,NULL +"246.3",246,"EASTERN_PROVINCE",NULL,NULL +"246.4",246,"LUAPULA_PROVINCE",NULL,NULL +"246.5",246,"LUSAKA_PROVINCE",NULL,NULL +"246.6",246,"MUCHINGA_PROVINCE",NULL,NULL +"246.7",246,"NORTHERN_PROVINCE",NULL,NULL +"246.8",246,"NORTHWESTERN_PROVINCE",NULL,NULL +"246.9",246,"SOUTHERN_PROVINCE",NULL,NULL +"24.7",24,"KOUFFO_DEPARTMENT","KO",NULL +"247.1",247,"BULAWAYO_PROVINCE","BU",NULL +"247.10",247,"MIDLANDS_PROVINCE","MI",NULL +"247.2",247,"HARARE_PROVINCE","HA",NULL +"247.3",247,"MANICALAND","MA",NULL +"247.4",247,"MASHONALAND_CENTRAL_PROVINCE","MC",NULL +"247.5",247,"MASHONALAND_EAST_PROVINCE","ME",NULL +"247.6",247,"MASHONALAND_WEST_PROVINCE","MW",NULL +"247.7",247,"MASVINGO_PROVINCE","MV",NULL +"247.8",247,"MATABELELAND_NORTH_PROVINCE","MN",NULL +"247.9",247,"MATABELELAND_SOUTH_PROVINCE","MS",NULL +"24.8",24,"LITTORAL_DEPARTMENT","LI",NULL +"24.9",24,"MONO_DEPARTMENT","MO",NULL +"25.1",25,"DEVONSHIRE","DEV",NULL +"25.2",25,"HAMILTON","HA",NULL +"25.3",25,"PAGET","PAG",NULL +"25.4",25,"PEMBROKE","PEM",NULL +"25.5",25,"SAINT_GEORGE'S","SGE",NULL +"25.6",25,"SANDYS","SAN",NULL +"25.7",25,"SMITH'S","SMI",NULL +"25.8",25,"SOUTHAMPTON","SOU",NULL +"25.9",25,"WARWICK","WAR",NULL +"26.1",26,"BUMTHANG_DISTRICT",NULL,NULL +"26.10",26,"PUNAKHA_DISTRICT",NULL,NULL +"26.11",26,"SAMDRUP_JONGKHAR_DISTRICT",NULL,NULL +"26.12",26,"SAMTSE_DISTRICT",NULL,NULL +"26.13",26,"SARPANG_DISTRICT",NULL,NULL +"26.14",26,"THIMPHU_DISTRICT",NULL,NULL +"26.15",26,"TRASHIGANG_DISTRICT",NULL,NULL +"26.16",26,"TRONGSA_DISTRICT",NULL,NULL +"26.17",26,"TSIRANG_DISTRICT",NULL,NULL +"26.18",26,"WANGDUE_PHODRANG_DISTRICT",NULL,NULL +"26.19",26,"ZHEMGANG_DISTRICT",NULL,NULL +"26.2",26,"CHUKHA_DISTRICT",NULL,NULL +"26.3",26,"DAGANA_DISTRICT",NULL,NULL +"26.4",26,"GASA_DISTRICT","GA",NULL +"26.5",26,"HAA_DISTRICT",NULL,NULL +"26.6",26,"LHUNTSE_DISTRICT",NULL,NULL +"26.7",26,"MONGAR_DISTRICT",NULL,NULL +"26.8",26,"PARO_DISTRICT",NULL,NULL +"26.9",26,"PEMAGATSHEL_DISTRICT",NULL,NULL +"27.1",27,"BENI_DEPARTMENT","B",NULL +"27.2",27,"CHUQUISACA_DEPARTMENT","H",NULL +"27.3",27,"COCHABAMBA_DEPARTMENT","C",NULL +"27.4",27,"LA_PAZ_DEPARTMENT","L",NULL +"27.5",27,"ORURO_DEPARTMENT","O",NULL +"27.6",27,"PANDO_DEPARTMENT","N",NULL +"27.7",27,"POTOSI_DEPARTMENT","P",NULL +"27.8",27,"SANTA_CRUZ_DEPARTMENT","S",NULL +"27.9",27,"TARIJA_DEPARTMENT","T",NULL +"28.1",28,"BOSNIAN_PODRINJE_CANTON",NULL,NULL +"28.10",28,"TUZLA_CANTON",NULL,NULL +"28.11",28,"UNA-SANA_CANTON",NULL,NULL +"28.12",28,"WEST_HERZEGOVINA_CANTON",NULL,NULL +"28.13",28,"ZENICA-DOBOJ_CANTON",NULL,NULL +"28.2",28,"BRCKO_DISTRICT","BRC",NULL +"28.3",28,"CANTON_10",NULL,NULL +"28.4",28,"CENTRAL_BOSNIA_CANTON",NULL,NULL +"28.5",28,"FEDERATION_OF_BOSNIA_AND_HERZEGOVINA","BIH",NULL +"28.6",28,"HERZEGOVINA-NERETVA_CANTON",NULL,NULL +"28.7",28,"POSAVINA_CANTON",NULL,NULL +"28.8",28,"REPUBLIKA_SRPSKA","SRP",NULL +"28.9",28,"SARAJEVO_CANTON",NULL,NULL +"29.1",29,"CENTRAL_DISTRICT","CE",NULL +"29.10",29,"SOUTHERN_DISTRICT","SO",NULL +"29.2",29,"GHANZI_DISTRICT","GH",NULL +"29.3",29,"KGALAGADI_DISTRICT","KG",NULL +"29.4",29,"KGATLENG_DISTRICT","KL",NULL +"29.5",29,"KWENENG_DISTRICT","KW",NULL +"29.6",29,"NGAMILAND","NG",NULL +"29.7",29,"NORTH-EAST_DISTRICT","NE",NULL +"29.8",29,"NORTH-WEST_DISTRICT","NW",NULL +"29.9",29,"SOUTH-EAST_DISTRICT","SE",NULL +"3.1",3,"BERAT_COUNTY",NULL,NULL +"3.10",3,"ELBASAN_COUNTY",NULL,NULL +"3.11",3,"FIER_COUNTY",NULL,NULL +"31.1",31,"ACRE","AC",NULL +"31.10",31,"MARANHAO","MA",NULL +"31.11",31,"MATO_GROSSO","MT",NULL +"31.12",31,"MATO_GROSSO_DO_SUL","MS",NULL +"31.13",31,"MINAS_GERAIS","MG",NULL +"31.14",31,"PARA","PA",NULL +"31.15",31,"PARAIBA","PB",NULL +"31.16",31,"PARANA","PR",NULL +"31.17",31,"PERNAMBUCO","PE",NULL +"31.18",31,"PIAUI","PI",NULL +"31.19",31,"RIO_DE_JANEIRO","RJ",NULL +"3.12",3,"FIER_DISTRICT","FR",NULL +"31.2",31,"ALAGOAS","AL",NULL +"31.20",31,"RIO_GRANDE_DO_NORTE","RN",NULL +"31.21",31,"RIO_GRANDE_DO_SUL","RS",NULL +"31.22",31,"RONDONIA","RO",NULL +"31.23",31,"RORAIMA","RR",NULL +"31.24",31,"SANTA_CATARINA","SC",NULL +"31.25",31,"SAO_PAULO","SP",NULL +"31.26",31,"SERGIPE","SE",NULL +"31.27",31,"TOCANTINS","TO",NULL +"3.13",3,"GJIROKASTER_COUNTY",NULL,NULL +"31.3",31,"AMAPA","AP",NULL +"3.14",3,"GJIROKASTER_DISTRICT","GJ",NULL +"31.4",31,"AMAZONAS","AM",NULL +"3.15",3,"GRAMSH_DISTRICT","GR",NULL +"31.5",31,"BAHIA","BA",NULL +"3.16",3,"HAS_DISTRICT","HA",NULL +"31.6",31,"CEARA","CE",NULL +"3.17",3,"KAVAJE_DISTRICT","KA",NULL +"31.7",31,"DISTRITO_FEDERAL","DF",NULL +"3.18",3,"KOLONJE_DISTRICT","ER",NULL +"31.8",31,"ESPIRITO_SANTO","ES",NULL +"3.19",3,"KORCE_COUNTY",NULL,NULL +"31.9",31,"GOIAS","GO",NULL +"3.2",3,"BERAT_DISTRICT","BR",NULL +"3.20",3,"KORCE_DISTRICT","KO",NULL +"3.21",3,"KRUJE_DISTRICT","KR",NULL +"3.22",3,"KUCOVE_DISTRICT","KC",NULL +"3.23",3,"KUKES_COUNTY",NULL,NULL +"3.24",3,"KUKES_DISTRICT","KU",NULL +"3.25",3,"KURBIN_DISTRICT","KB",NULL +"3.26",3,"LEZHE_COUNTY",NULL,NULL +"3.27",3,"LEZHE_DISTRICT","LE",NULL +"3.28",3,"LIBRAZHD_DISTRICT","LB",NULL +"3.29",3,"LUSHNJE_DISTRICT","LU",NULL +"3.3",3,"BULQIZE_DISTRICT","BU",NULL +"3.30",3,"MALESI_E_MADHE_DISTRICT","MM",NULL +"3.31",3,"MALLAKASTER_DISTRICT","MK",NULL +"33.1",33,"BELAIT_DISTRICT","BE",NULL +"3.32",3,"MAT_DISTRICT","MT",NULL +"33.2",33,"BRUNEI-MUARA_DISTRICT","BM",NULL +"3.33",3,"MIRDITE_DISTRICT","MR",NULL +"33.3",33,"TEMBURONG_DISTRICT","TE",NULL +"3.34",3,"PEQIN_DISTRICT","PQ",NULL +"33.4",33,"TUTONG_DISTRICT","TU",NULL +"3.35",3,"PERMET_DISTRICT","PR",NULL +"3.36",3,"POGRADEC_DISTRICT","PG",NULL +"3.37",3,"PUKE_DISTRICT","PU",NULL +"3.38",3,"SARANDE_DISTRICT","SR",NULL +"3.39",3,"SHKODER_COUNTY",NULL,NULL +"3.4",3,"DELVINE_DISTRICT","DL",NULL +"3.40",3,"SHKODER_DISTRICT","SH",NULL +"3.41",3,"SKRAPAR_DISTRICT","SK",NULL +"34.1",34,"BLAGOEVGRAD_PROVINCE",NULL,NULL +"34.10",34,"PAZARDZHIK_PROVINCE",NULL,NULL +"34.11",34,"PERNIK_PROVINCE",NULL,NULL +"34.12",34,"PLEVEN_PROVINCE",NULL,NULL +"34.13",34,"PLOVDIV_PROVINCE",NULL,NULL +"34.14",34,"RAZGRAD_PROVINCE",NULL,NULL +"34.15",34,"RUSE_PROVINCE",NULL,NULL +"34.16",34,"SHUMEN",NULL,NULL +"34.17",34,"SILISTRA_PROVINCE",NULL,NULL +"34.18",34,"SLIVEN_PROVINCE",NULL,NULL +"34.19",34,"SMOLYAN_PROVINCE",NULL,NULL +"3.42",3,"TEPELENE_DISTRICT","TE",NULL +"34.2",34,"BURGAS_PROVINCE",NULL,NULL +"34.20",34,"SOFIA_CITY_PROVINCE",NULL,NULL +"34.21",34,"SOFIA_PROVINCE",NULL,NULL +"34.22",34,"STARA_ZAGORA_PROVINCE",NULL,NULL +"34.23",34,"TARGOVISHTE_PROVINCE",NULL,NULL +"34.24",34,"VARNA_PROVINCE",NULL,NULL +"34.25",34,"VELIKO_TARNOVO_PROVINCE",NULL,NULL +"34.26",34,"VIDIN_PROVINCE",NULL,NULL +"34.27",34,"VRATSA_PROVINCE",NULL,NULL +"34.28",34,"YAMBOL_PROVINCE",NULL,NULL +"3.43",3,"TIRANA_COUNTY",NULL,NULL +"34.3",34,"DOBRICH_PROVINCE",NULL,NULL +"3.44",3,"TIRANA_DISTRICT","TR",NULL +"34.4",34,"GABROVO_PROVINCE",NULL,NULL +"3.45",3,"TROPOJE_DISTRICT","TP",NULL +"34.5",34,"HASKOVO_PROVINCE",NULL,NULL +"3.46",3,"VLORE_COUNTY",NULL,NULL +"34.6",34,"KARDZHALI_PROVINCE",NULL,NULL +"3.47",3,"VLORE_DISTRICT","VL",NULL +"34.7",34,"KYUSTENDIL_PROVINCE",NULL,NULL +"34.8",34,"LOVECH_PROVINCE",NULL,NULL +"34.9",34,"MONTANA_PROVINCE",NULL,NULL +"3.5",3,"DEVOLL_DISTRICT","DV",NULL +"35.1",35,"BALE_PROVINCE","BAL",NULL +"35.10",35,"CENTRE-EST_REGION",NULL,NULL +"35.11",35,"CENTRE-NORD_REGION",NULL,NULL +"35.12",35,"CENTRE-OUEST_REGION",NULL,NULL +"35.13",35,"CENTRE-SUD_REGION",NULL,NULL +"35.14",35,"COMOE_PROVINCE","COM",NULL +"35.15",35,"EST_REGION",NULL,NULL +"35.16",35,"GANZOURGOU_PROVINCE","GAN",NULL +"35.17",35,"GNAGNA_PROVINCE","GNA",NULL +"35.18",35,"GOURMA_PROVINCE","GOU",NULL +"35.19",35,"HAUTS-BASSINS_REGION",NULL,NULL +"35.2",35,"BAM_PROVINCE","BAM",NULL +"35.20",35,"HOUET_PROVINCE","HOU",NULL +"35.21",35,"IOBA_PROVINCE","IOB",NULL +"35.22",35,"KADIOGO_PROVINCE","KAD",NULL +"35.23",35,"KENEDOUGOU_PROVINCE","KEN",NULL +"35.24",35,"KOMONDJARI_PROVINCE","KMD",NULL +"35.25",35,"KOMPIENGA_PROVINCE","KMP",NULL +"35.26",35,"KOSSI_PROVINCE","KOS",NULL +"35.27",35,"KOULPELOGO_PROVINCE","KOP",NULL +"35.28",35,"KOURITENGA_PROVINCE","KOT",NULL +"35.29",35,"KOURWEOGO_PROVINCE","KOW",NULL +"35.3",35,"BANWA_PROVINCE","BAN",NULL +"35.30",35,"LERABA_PROVINCE","LER",NULL +"35.31",35,"LOROUM_PROVINCE","LOR",NULL +"35.32",35,"MOUHOUN","MOU",NULL +"35.33",35,"NAHOURI_PROVINCE","NAO",NULL +"35.34",35,"NAMENTENGA_PROVINCE","NAM",NULL +"35.35",35,"NAYALA_PROVINCE","NAY",NULL +"35.36",35,"NORD_REGION,_BURKINA_FASO",NULL,NULL +"35.37",35,"NOUMBIEL_PROVINCE","NOU",NULL +"35.38",35,"OUBRITENGA_PROVINCE","OUB",NULL +"35.39",35,"OUDALAN_PROVINCE","OUD",NULL +"35.4",35,"BAZEGA_PROVINCE","BAZ",NULL +"35.40",35,"PASSORE_PROVINCE","PAS",NULL +"35.41",35,"PLATEAU-CENTRAL_REGION",NULL,NULL +"35.42",35,"PONI_PROVINCE","PON",NULL +"35.43",35,"SAHEL_REGION",NULL,NULL +"35.44",35,"SANGUIE_PROVINCE","SNG",NULL +"35.45",35,"SANMATENGA_PROVINCE","SMT",NULL +"35.46",35,"SENO_PROVINCE","SEN",NULL +"35.47",35,"SISSILI_PROVINCE","SIS",NULL +"35.48",35,"SOUM_PROVINCE","SOM",NULL +"35.49",35,"SOUROU_PROVINCE","SOR",NULL +"35.5",35,"BOUCLE_DU_MOUHOUN_REGION",NULL,NULL +"35.50",35,"SUD-OUEST_REGION",NULL,NULL +"35.51",35,"TAPOA_PROVINCE","TAP",NULL +"35.52",35,"TUY_PROVINCE","TUI",NULL +"35.53",35,"YAGHA_PROVINCE","YAG",NULL +"35.54",35,"YATENGA_PROVINCE","YAT",NULL +"35.55",35,"ZIRO_PROVINCE","ZIR",NULL +"35.56",35,"ZONDOMA_PROVINCE","ZON",NULL +"35.57",35,"ZOUNDWEOGO_PROVINCE","ZOU",NULL +"35.6",35,"BOUGOURIBA_PROVINCE","BGR",NULL +"35.7",35,"BOULGOU","BLG",NULL +"35.8",35,"CASCADES_REGION",NULL,NULL +"35.9",35,"CENTRE",NULL,NULL +"3.6",3,"DIBER_COUNTY",NULL,NULL +"36.1",36,"BUBANZA_PROVINCE","BB",NULL +"36.10",36,"KIRUNDO_PROVINCE","KI",NULL +"36.11",36,"MAKAMBA_PROVINCE","MA",NULL +"36.12",36,"MURAMVYA_PROVINCE","MU",NULL +"36.13",36,"MUYINGA_PROVINCE","MY",NULL +"36.14",36,"MWARO_PROVINCE","MW",NULL +"36.15",36,"NGOZI_PROVINCE","NG",NULL +"36.16",36,"RUMONGE_PROVINCE","RM",NULL +"36.17",36,"RUTANA_PROVINCE","RT",NULL +"36.18",36,"RUYIGI_PROVINCE","RY",NULL +"36.2",36,"BUJUMBURA_MAIRIE_PROVINCE","BM",NULL +"36.3",36,"BUJUMBURA_RURAL_PROVINCE","BL",NULL +"36.4",36,"BURURI_PROVINCE","BR",NULL +"36.5",36,"CANKUZO_PROVINCE","CA",NULL +"36.6",36,"CIBITOKE_PROVINCE","CI",NULL +"36.7",36,"GITEGA_PROVINCE","GI",NULL +"36.8",36,"KARUZI_PROVINCE","KR",NULL +"36.9",36,"KAYANZA_PROVINCE","KY",NULL +"3.7",3,"DIBER_DISTRICT","DI",NULL +"37.1",37,"BANTEAY_MEANCHEY",NULL,NULL +"37.10",37,"KOH_KONG",NULL,NULL +"37.11",37,"KRATIE",NULL,NULL +"37.12",37,"MONDULKIRI",NULL,NULL +"37.13",37,"ODDAR_MEANCHEY",NULL,NULL +"37.14",37,"PAILIN",NULL,NULL +"37.15",37,"PHNOM_PENH",NULL,NULL +"37.16",37,"PREAH_VIHEAR",NULL,NULL +"37.17",37,"PREY_VENG",NULL,NULL +"37.18",37,"PURSAT",NULL,NULL +"37.19",37,"RATANAKIRI",NULL,NULL +"37.2",37,"BATTAMBANG",NULL,NULL +"37.20",37,"SIEM_REAP",NULL,NULL +"37.21",37,"SIHANOUKVILLE",NULL,NULL +"37.22",37,"STUNG_TRENG",NULL,NULL +"37.23",37,"SVAY_RIENG",NULL,NULL +"37.24",37,"TAKEO",NULL,NULL +"37.3",37,"KAMPONG_CHAM",NULL,NULL +"37.4",37,"KAMPONG_CHHNANG",NULL,NULL +"37.5",37,"KAMPONG_SPEU",NULL,NULL +"37.6",37,"KAMPONG_THOM",NULL,NULL +"37.7",37,"KAMPOT",NULL,NULL +"37.8",37,"KANDAL",NULL,NULL +"37.9",37,"KEP",NULL,NULL +"3.8",3,"DURRES_COUNTY",NULL,NULL +"38.1",38,"ADAMAWA","AD",NULL +"38.10",38,"WEST","OU",NULL +"38.2",38,"CENTRE","CE",NULL +"38.3",38,"EAST","ES",NULL +"38.4",38,"FAR_NORTH","EN",NULL +"38.5",38,"LITTORAL","LT",NULL +"38.6",38,"NORTH","NO",NULL +"38.7",38,"NORTHWEST","NW",NULL +"38.8",38,"SOUTH","SU",NULL +"38.9",38,"SOUTHWEST","SW",NULL +"3.9",3,"DURRES_DISTRICT","DR",NULL +"39.1",39,"ALBERTA","AB",NULL +"39.10",39,"PRINCE_EDWARD_ISLAND","PE",NULL +"39.11",39,"QUEBEC","QC",NULL +"39.12",39,"SASKATCHEWAN","SK",NULL +"39.13",39,"YUKON","YT",NULL +"39.2",39,"BRITISH_COLUMBIA","BC",NULL +"39.3",39,"MANITOBA","MB",NULL +"39.4",39,"NEW_BRUNSWICK","NB",NULL +"39.5",39,"NEWFOUNDLAND_AND_LABRADOR","NL",NULL +"39.6",39,"NORTHWEST_TERRITORIES","NT",NULL +"39.7",39,"NOVA_SCOTIA","NS",NULL +"39.8",39,"NUNAVUT","NU",NULL +"39.9",39,"ONTARIO","ON",NULL +"40.1",40,"BARLAVENTO_ISLANDS","B",NULL +"40.10",40,"RIBEIRA_GRANDE","RG",NULL +"40.11",40,"RIBEIRA_GRANDE_DE_SANTIAGO","RS",NULL +"40.12",40,"SAL","SL",NULL +"40.13",40,"SANTA_CATARINA","CA",NULL +"40.14",40,"SANTA_CATARINA_DO_FOGO","CF",NULL +"40.15",40,"SANTA_CRUZ","CR",NULL +"40.16",40,"SAO_DOMINGOS","SD",NULL +"40.17",40,"SAO_FILIPE","SF",NULL +"40.18",40,"SAO_LOURENCO_DOS_ORGAOS","SO",NULL +"40.19",40,"SAO_MIGUEL","SM",NULL +"40.2",40,"BOA_VISTA","BV",NULL +"40.20",40,"SAO_VICENTE","SV",NULL +"40.21",40,"SOTAVENTO_ISLANDS","S",NULL +"40.22",40,"TARRAFAL","TA",NULL +"40.23",40,"TARRAFAL_DE_SAO_NICOLAU","TS",NULL +"40.3",40,"BRAVA","BR",NULL +"40.4",40,"MAIO_MUNICIPALITY","MA",NULL +"40.5",40,"MOSTEIROS","MO",NULL +"40.6",40,"PAUL","PA",NULL +"40.7",40,"PORTO_NOVO","PN",NULL +"40.8",40,"PRAIA","PR",NULL +"40.9",40,"RIBEIRA_BRAVA_MUNICIPALITY","RB",NULL +"4.1",4,"ADRAR",NULL,NULL +"4.10",4,"BISKRA",NULL,NULL +"4.11",4,"BLIDA",NULL,NULL +"4.12",4,"BORDJ_BAJI_MOKHTAR",NULL,NULL +"4.13",4,"BORDJ_BOU_ARRERIDJ",NULL,NULL +"4.14",4,"BOUIRA",NULL,NULL +"4.15",4,"BOUMERDES",NULL,NULL +"4.16",4,"CHLEF",NULL,NULL +"4.17",4,"CONSTANTINE",NULL,NULL +"4.18",4,"DJANET",NULL,NULL +"4.19",4,"DJELFA",NULL,NULL +"4.2",4,"AIN_DEFLA",NULL,NULL +"4.20",4,"EL_BAYADH",NULL,NULL +"4.21",4,"EL_M'GHAIR",NULL,NULL +"42.1",42,"BAMINGUI-BANGORAN_PREFECTURE","BB",NULL +"42.10",42,"NANA-GREBIZI_ECONOMIC_PREFECTURE","KB",NULL +"42.11",42,"NANA-MAMBERE_PREFECTURE","NM",NULL +"42.12",42,"OMBELLA-M'POKO_PREFECTURE","MP",NULL +"42.13",42,"OUAKA_PREFECTURE","UK",NULL +"42.14",42,"OUHAM_PREFECTURE","AC",NULL +"42.15",42,"OUHAM-PENDE_PREFECTURE","OP",NULL +"42.16",42,"SANGHA-MBAERE","SE",NULL +"42.17",42,"VAKAGA_PREFECTURE","VK",NULL +"4.22",4,"EL_MENIA",NULL,NULL +"42.2",42,"BANGUI","BGF",NULL +"4.23",4,"EL_OUED",NULL,NULL +"42.3",42,"BASSE-KOTTO_PREFECTURE","BK",NULL +"4.24",4,"EL_TARF",NULL,NULL +"42.4",42,"HAUT-MBOMOU_PREFECTURE","HM",NULL +"4.25",4,"GHARDAIA",NULL,NULL +"42.5",42,"HAUTE-KOTTO_PREFECTURE","HK",NULL +"4.26",4,"GUELMA",NULL,NULL +"42.6",42,"KEMO_PREFECTURE","KG",NULL +"4.27",4,"ILLIZI",NULL,NULL +"42.7",42,"LOBAYE_PREFECTURE","LB",NULL +"4.28",4,"IN_GUEZZAM",NULL,NULL +"42.8",42,"MAMBERE-KADEI","HS",NULL +"4.29",4,"IN_SALAH",NULL,NULL +"42.9",42,"MBOMOU_PREFECTURE","MB",NULL +"4.3",4,"AIN_TEMOUCHENT",NULL,NULL +"4.30",4,"JIJEL",NULL,NULL +"4.31",4,"KHENCHELA",NULL,NULL +"43.1",43,"BAHR_EL_GAZEL","BG",NULL +"43.10",43,"LAC","LC",NULL +"43.11",43,"LOGONE_OCCIDENTAL","LO",NULL +"43.12",43,"LOGONE_ORIENTAL","LR",NULL +"43.13",43,"MANDOUL","MA",NULL +"43.14",43,"MAYO-KEBBI_EST","ME",NULL +"43.15",43,"MAYO-KEBBI_OUEST","MO",NULL +"43.16",43,"MOYEN-CHARI","MC",NULL +"43.17",43,"N'DJAMENA","ND",NULL +"43.18",43,"OUADDAI","OD",NULL +"43.19",43,"SALAMAT","SA",NULL +"4.32",4,"LAGHOUAT",NULL,NULL +"43.2",43,"BATHA","BA",NULL +"43.20",43,"SILA","SI",NULL +"43.21",43,"TANDJILE","TA",NULL +"43.22",43,"TIBESTI","TI",NULL +"43.23",43,"WADI_FIRA","WF",NULL +"4.33",4,"M'SILA",NULL,NULL +"43.3",43,"BORKOU","BO",NULL +"4.34",4,"MASCARA",NULL,NULL +"43.4",43,"CHARI-BAGUIRMI","CB",NULL +"4.35",4,"MEDEA",NULL,NULL +"43.5",43,"ENNEDI-EST","EE",NULL +"4.36",4,"MILA",NULL,NULL +"43.6",43,"ENNEDI-OUEST","EO",NULL +"4.37",4,"MOSTAGANEM",NULL,NULL +"43.7",43,"GUERA","GR",NULL +"4.38",4,"NAAMA",NULL,NULL +"43.8",43,"HADJER-LAMIS","HL",NULL +"4.39",4,"ORAN",NULL,NULL +"43.9",43,"KANEM","KA",NULL +"4.4",4,"ALGIERS",NULL,NULL +"4.40",4,"OUARGLA",NULL,NULL +"4.41",4,"OULED_DJELLAL",NULL,NULL +"44.1",44,"AISEN_DEL_GENERAL_CARLOS_IBANEZ_DEL_CAMPO","AI",NULL +"44.10",44,"LOS_RIOS","LR",NULL +"44.11",44,"MAGALLANES_Y_DE_LA_ANTARTICA_CHILENA","MA",NULL +"44.12",44,"MAULE","ML",NULL +"44.13",44,"NUBLE","NB",NULL +"44.14",44,"REGION_METROPOLITANA_DE_SANTIAGO","RM",NULL +"44.15",44,"TARAPACA","TA",NULL +"44.16",44,"VALPARAISO","VS",NULL +"4.42",4,"OUM_EL_BOUAGHI",NULL,NULL +"44.2",44,"ANTOFAGASTA","AN",NULL +"4.43",4,"RELIZANE",NULL,NULL +"44.3",44,"ARICA_Y_PARINACOTA","AP",NULL +"4.44",4,"SAIDA",NULL,NULL +"44.4",44,"ATACAMA","AT",NULL +"4.45",4,"SETIF",NULL,NULL +"44.5",44,"BIOBIO","BI",NULL +"4.46",4,"SIDI_BEL_ABBES",NULL,NULL +"44.6",44,"COQUIMBO","CO",NULL +"4.47",4,"SKIKDA",NULL,NULL +"44.7",44,"LA_ARAUCANIA","AR",NULL +"4.48",4,"SOUK_AHRAS",NULL,NULL +"44.8",44,"LIBERTADOR_GENERAL_BERNARDO_O'HIGGINS","LI",NULL +"4.49",4,"TAMANGHASSET",NULL,NULL +"44.9",44,"LOS_LAGOS","LL",NULL +"4.5",4,"ANNABA",NULL,NULL +"4.50",4,"TEBESSA",NULL,NULL +"4.51",4,"TIARET",NULL,NULL +"45.1",45,"ANHUI","AH",NULL +"45.10",45,"HEBEI","HE",NULL +"45.11",45,"HEILONGJIANG","HL",NULL +"45.12",45,"HENAN","HA",NULL +"45.13",45,"HONG_KONG_SAR","HK",NULL +"45.14",45,"HUBEI","HB",NULL +"45.15",45,"HUNAN","HN",NULL +"45.16",45,"INNER_MONGOLIA","NM",NULL +"45.17",45,"JIANGSU","JS",NULL +"45.18",45,"JIANGXI","JX",NULL +"45.19",45,"JILIN","JL",NULL +"4.52",4,"TIMIMOUN",NULL,NULL +"45.2",45,"BEIJING","BJ",NULL +"45.20",45,"LIAONING","LN",NULL +"45.21",45,"MACAU_SAR","MO",NULL +"45.22",45,"NINGXIA_HUIZU","NX",NULL +"45.23",45,"QINGHAI","QH",NULL +"45.24",45,"SHAANXI","SN",NULL +"45.25",45,"SHANDONG","SD",NULL +"45.26",45,"SHANGHAI","SH",NULL +"45.27",45,"SHANXI","SX",NULL +"45.28",45,"SICHUAN","SC",NULL +"45.29",45,"TAIWAN","TW",NULL +"4.53",4,"TINDOUF",NULL,NULL +"45.3",45,"CHONGQING","CQ",NULL +"45.30",45,"TIANJIN","TJ",NULL +"45.31",45,"XINJIANG","XJ",NULL +"45.32",45,"XIZANG","XZ",NULL +"45.33",45,"YUNNAN","YN",NULL +"45.34",45,"ZHEJIANG","ZJ",NULL +"4.54",4,"TIPASA",NULL,NULL +"45.4",45,"FUJIAN","FJ",NULL +"4.55",4,"TISSEMSILT",NULL,NULL +"45.5",45,"GANSU","GS",NULL +"4.56",4,"TIZI_OUZOU",NULL,NULL +"45.6",45,"GUANGDONG","GD",NULL +"4.57",4,"TLEMCEN",NULL,NULL +"45.7",45,"GUANGXI_ZHUANG","GX",NULL +"4.58",4,"TOUGGOURT",NULL,NULL +"45.8",45,"GUIZHOU","GZ",NULL +"45.9",45,"HAINAN","HI",NULL +"4.6",4,"BATNA",NULL,NULL +"4.7",4,"BECHAR",NULL,NULL +"4.8",4,"BEJAIA",NULL,NULL +"48.1",48,"AMAZONAS","AMA",NULL +"48.10",48,"CAQUETA","CAQ",NULL +"48.11",48,"CASANARE","CAS",NULL +"48.12",48,"CAUCA","CAU",NULL +"48.13",48,"CESAR","CES",NULL +"48.14",48,"CHOCO","CHO",NULL +"48.15",48,"CORDOBA","COR",NULL +"48.16",48,"CUNDINAMARCA","CUN",NULL +"48.17",48,"GUAINIA","GUA",NULL +"48.18",48,"GUAVIARE","GUV",NULL +"48.19",48,"HUILA","HUI",NULL +"48.2",48,"ANTIOQUIA","ANT",NULL +"48.20",48,"LA_GUAJIRA","LAG",NULL +"48.21",48,"MAGDALENA","MAG",NULL +"48.22",48,"META","MET",NULL +"48.23",48,"NARINO","NAR",NULL +"48.24",48,"NORTE_DE_SANTANDER","NSA",NULL +"48.25",48,"PUTUMAYO","PUT",NULL +"48.26",48,"QUINDIO","QUI",NULL +"48.27",48,"RISARALDA","RIS",NULL +"48.28",48,"SANTANDER","SAN",NULL +"48.29",48,"SUCRE","SUC",NULL +"48.3",48,"ARAUCA","ARA",NULL +"48.30",48,"TOLIMA","TOL",NULL +"48.31",48,"VALLE_DEL_CAUCA","VAC",NULL +"48.32",48,"VAUPES","VAU",NULL +"48.33",48,"VICHADA","VID",NULL +"48.4",48,"ARCHIPIELAGO_DE_SAN_ANDRES,_PROVIDENCIA_Y_SANTA_CATALINA","SAP",NULL +"48.5",48,"ATLANTICO","ATL",NULL +"48.6",48,"BOGOTA_D.C.","DC",NULL +"48.7",48,"BOLIVAR","BOL",NULL +"48.8",48,"BOYACA","BOY",NULL +"48.9",48,"CALDAS","CAL",NULL +"4.9",4,"BENI_ABBES",NULL,NULL +"49.1",49,"ANJOUAN","A",NULL +"49.2",49,"GRANDE_COMORE","G",NULL +"49.3",49,"MOHELI","M",NULL +"50.1",50,"BOUENZA_DEPARTMENT",NULL,NULL +"50.10",50,"POINTE-NOIRE",NULL,NULL +"50.11",50,"POOL_DEPARTMENT",NULL,NULL +"50.12",50,"SANGHA_DEPARTMENT",NULL,NULL +"50.2",50,"BRAZZAVILLE","BZV",NULL +"50.3",50,"CUVETTE_DEPARTMENT",NULL,NULL +"50.4",50,"CUVETTE-OUEST_DEPARTMENT",NULL,NULL +"50.5",50,"KOUILOU_DEPARTMENT",NULL,NULL +"50.6",50,"LEKOUMOU_DEPARTMENT",NULL,NULL +"50.7",50,"LIKOUALA_DEPARTMENT",NULL,NULL +"50.8",50,"NIARI_DEPARTMENT",NULL,NULL +"50.9",50,"PLATEAUX_DEPARTMENT",NULL,NULL +"51.1",51,"BAS-UELE","BU",NULL +"51.10",51,"KINSHASA","KN",NULL +"51.11",51,"KONGO_CENTRAL","BC",NULL +"51.12",51,"KWANGO","KG",NULL +"51.13",51,"KWILU","KL",NULL +"51.14",51,"LOMAMI","LO",NULL +"51.15",51,"LUALABA","LU",NULL +"51.16",51,"MAI-NDOMBE","MN",NULL +"51.17",51,"MANIEMA","MA",NULL +"51.18",51,"MONGALA","MO",NULL +"51.19",51,"NORD-KIVU","NK",NULL +"51.2",51,"EQUATEUR","EQ",NULL +"51.20",51,"NORD-UBANGI","NU",NULL +"51.21",51,"SANKURU","SA",NULL +"51.22",51,"SUD-KIVU","SK",NULL +"51.23",51,"SUD-UBANGI","SU",NULL +"51.24",51,"TANGANYIKA","TA",NULL +"51.25",51,"TSHOPO","TO",NULL +"51.26",51,"TSHUAPA","TU",NULL +"51.3",51,"HAUT-KATANGA","HK",NULL +"51.4",51,"HAUT-LOMAMI","HL",NULL +"51.5",51,"HAUT-UELE","HU",NULL +"51.6",51,"ITURI","IT",NULL +"51.7",51,"KASAI","KS",NULL +"51.8",51,"KASAI_CENTRAL","KC",NULL +"51.9",51,"KASAI_ORIENTAL","KE",NULL +"53.1",53,"ALAJUELA_PROVINCE","A",NULL +"53.2",53,"GUANACASTE_PROVINCE","G",NULL +"53.3",53,"HEREDIA_PROVINCE","H",NULL +"53.4",53,"LIMON_PROVINCE","L",NULL +"53.5",53,"PROVINCIA_DE_CARTAGO","C",NULL +"53.6",53,"PUNTARENAS_PROVINCE","P",NULL +"53.7",53,"SAN_JOSE_PROVINCE","SJ",NULL +"54.1",54,"ABIDJAN","AB",NULL +"54.10",54,"FROMAGER",NULL,NULL +"54.11",54,"GOH-DJIBOUA_DISTRICT","GD",NULL +"54.12",54,"HAUT-SASSANDRA",NULL,NULL +"54.13",54,"LACS_DISTRICT","LC",NULL +"54.14",54,"LACS_REGION",NULL,NULL +"54.15",54,"LAGUNES_DISTRICT","LG",NULL +"54.16",54,"LAGUNES_REGION",NULL,NULL +"54.17",54,"MARAHOUE_REGION",NULL,NULL +"54.18",54,"MONTAGNES_DISTRICT","MG",NULL +"54.19",54,"MOYEN-CAVALLY",NULL,NULL +"54.2",54,"AGNEBY",NULL,NULL +"54.20",54,"MOYEN-COMOE",NULL,NULL +"54.21",54,"N'ZI-COMOE",NULL,NULL +"54.22",54,"SASSANDRA-MARAHOUE_DISTRICT","SM",NULL +"54.23",54,"SAVANES_REGION",NULL,NULL +"54.24",54,"SUD-BANDAMA",NULL,NULL +"54.25",54,"SUD-COMOE",NULL,NULL +"54.26",54,"VALLEE_DU_BANDAMA_DISTRICT","VB",NULL +"54.27",54,"VALLEE_DU_BANDAMA_REGION",NULL,NULL +"54.28",54,"WOROBA_DISTRICT","WR",NULL +"54.29",54,"WORODOUGOU",NULL,NULL +"54.3",54,"BAFING_REGION",NULL,NULL +"54.30",54,"YAMOUSSOUKRO","YM",NULL +"54.31",54,"ZANZAN_REGION","ZZ",NULL +"54.4",54,"BAS-SASSANDRA_DISTRICT","BS",NULL +"54.5",54,"BAS-SASSANDRA_REGION",NULL,NULL +"54.6",54,"COMOE_DISTRICT","CM",NULL +"54.7",54,"DENGUELE_DISTRICT","DN",NULL +"54.8",54,"DENGUELE_REGION",NULL,NULL +"54.9",54,"DIX-HUIT_MONTAGNES",NULL,NULL +"55.1",55,"BJELOVAR-BILOGORA",NULL,NULL +"55.10",55,"OSIJEK-BARANJA",NULL,NULL +"55.11",55,"POZEGA-SLAVONIA",NULL,NULL +"55.12",55,"PRIMORJE-GORSKI_KOTAR",NULL,NULL +"55.13",55,"SIBENIK-KNIN",NULL,NULL +"55.14",55,"SISAK-MOSLAVINA",NULL,NULL +"55.15",55,"SPLIT-DALMATIA",NULL,NULL +"55.16",55,"VARAZDIN",NULL,NULL +"55.17",55,"VIROVITICA-PODRAVINA",NULL,NULL +"55.18",55,"VUKOVAR-SYRMIA",NULL,NULL +"55.19",55,"ZADAR",NULL,NULL +"55.2",55,"BROD-POSAVINA",NULL,NULL +"55.20",55,"ZAGREB",NULL,NULL +"55.21",55,"ZAGREB",NULL,NULL +"55.3",55,"DUBROVNIK-NERETVA",NULL,NULL +"55.4",55,"ISTRIA",NULL,NULL +"55.5",55,"KARLOVAC",NULL,NULL +"55.6",55,"KOPRIVNICA-KRIZEVCI",NULL,NULL +"55.7",55,"KRAPINA-ZAGORJE",NULL,NULL +"55.8",55,"LIKA-SENJ",NULL,NULL +"55.9",55,"MEDIMURJE",NULL,NULL +"56.1",56,"ARTEMISA_PROVINCE",NULL,NULL +"56.10",56,"LAS_TUNAS_PROVINCE",NULL,NULL +"56.11",56,"MATANZAS_PROVINCE",NULL,NULL +"56.12",56,"MAYABEQUE_PROVINCE",NULL,NULL +"56.13",56,"PINAR_DEL_RIO_PROVINCE",NULL,NULL +"56.14",56,"SANCTI_SPIRITUS_PROVINCE",NULL,NULL +"56.15",56,"SANTIAGO_DE_CUBA_PROVINCE",NULL,NULL +"56.16",56,"VILLA_CLARA_PROVINCE",NULL,NULL +"56.2",56,"CAMAGUEY_PROVINCE",NULL,NULL +"56.3",56,"CIEGO_DE_AVILA_PROVINCE",NULL,NULL +"56.4",56,"CIENFUEGOS_PROVINCE",NULL,NULL +"56.5",56,"GRANMA_PROVINCE",NULL,NULL +"56.6",56,"GUANTANAMO_PROVINCE",NULL,NULL +"56.7",56,"HAVANA_PROVINCE",NULL,NULL +"56.8",56,"HOLGUIN_PROVINCE",NULL,NULL +"56.9",56,"ISLA_DE_LA_JUVENTUD",NULL,NULL +"57.1",57,"FAMAGUSTA_DISTRICT_(MAGUSA)",NULL,NULL +"57.2",57,"KYRENIA_DISTRICT_(KERYNEIA)",NULL,NULL +"57.3",57,"LARNACA_DISTRICT_(LARNAKA)",NULL,NULL +"57.4",57,"LIMASSOL_DISTRICT_(LEYMASUN)",NULL,NULL +"57.5",57,"NICOSIA_DISTRICT_(LEFKOSA)",NULL,NULL +"57.6",57,"PAPHOS_DISTRICT_(PAFOS)",NULL,NULL +"58.1",58,"BENESOV",NULL,NULL +"58.10",58,"CESKY_KRUMLOV",NULL,NULL +"58.11",58,"CHEB",NULL,NULL +"58.12",58,"CHOMUTOV",NULL,NULL +"58.13",58,"CHRUDIM",NULL,NULL +"58.14",58,"DECIN",NULL,NULL +"58.15",58,"DOMAZLICE",NULL,NULL +"58.16",58,"FRYDEK-MISTEK",NULL,NULL +"58.17",58,"HAVLICKUV_BROD",NULL,NULL +"58.18",58,"HODONIN",NULL,NULL +"58.19",58,"HRADEC_KRALOVE",NULL,NULL +"58.2",58,"BEROUN",NULL,NULL +"58.20",58,"JABLONEC_NAD_NISOU",NULL,NULL +"58.21",58,"JESENIK",NULL,NULL +"58.22",58,"JICIN",NULL,NULL +"58.23",58,"JIHLAVA",NULL,NULL +"58.24",58,"JIHOCESKY_KRAJ",NULL,NULL +"58.25",58,"JIHOMORAVSKY_KRAJ",NULL,NULL +"58.26",58,"JINDRICHUV_HRADEC",NULL,NULL +"58.27",58,"KARLOVARSKY_KRAJ",NULL,NULL +"58.28",58,"KARLOVY_VARY",NULL,NULL +"58.29",58,"KARVINA",NULL,NULL +"58.3",58,"BLANSKO",NULL,NULL +"58.30",58,"KLADNO",NULL,NULL +"58.31",58,"KLATOVY",NULL,NULL +"58.32",58,"KOLIN",NULL,NULL +"58.33",58,"KRAJ_VYSOCINA",NULL,NULL +"58.34",58,"KRALOVEHRADECKY_KRAJ",NULL,NULL +"58.35",58,"KROMERIZ",NULL,NULL +"58.36",58,"KUTNA_HORA",NULL,NULL +"58.37",58,"LIBEREC",NULL,NULL +"58.38",58,"LIBERECKY_KRAJ",NULL,NULL +"58.39",58,"LITOMERICE",NULL,NULL +"58.4",58,"BRECLAV",NULL,NULL +"58.40",58,"LOUNY",NULL,NULL +"58.41",58,"MELNIK",NULL,NULL +"58.42",58,"MLADA_BOLESLAV",NULL,NULL +"58.43",58,"MORAVSKOSLEZSKY_KRAJ",NULL,NULL +"58.44",58,"MOST",NULL,NULL +"58.45",58,"NACHOD",NULL,NULL +"58.46",58,"NOVY_JICIN",NULL,NULL +"58.47",58,"NYMBURK",NULL,NULL +"58.48",58,"OLOMOUC",NULL,NULL +"58.49",58,"OLOMOUCKY_KRAJ",NULL,NULL +"58.5",58,"BRNO-MESTO",NULL,NULL +"58.50",58,"OPAVA",NULL,NULL +"58.51",58,"OSTRAVA-MESTO",NULL,NULL +"58.52",58,"PARDUBICE",NULL,NULL +"58.53",58,"PARDUBICKY_KRAJ",NULL,NULL +"58.54",58,"PELHRIMOV",NULL,NULL +"58.55",58,"PISEK",NULL,NULL +"58.56",58,"PLZEN-JIH",NULL,NULL +"58.57",58,"PLZEN-MESTO",NULL,NULL +"58.58",58,"PLZEN-SEVER",NULL,NULL +"58.59",58,"PLZENSKY_KRAJ",NULL,NULL +"58.6",58,"BRNO-VENKOV",NULL,NULL +"58.60",58,"PRACHATICE",NULL,NULL +"58.61",58,"PRAHA-VYCHOD",NULL,NULL +"58.62",58,"PRAHA-ZAPAD","20A",NULL +"58.63",58,"PRAHA,_HLAVNI_MESTO",NULL,NULL +"58.64",58,"PREROV",NULL,NULL +"58.65",58,"PRIBRAM","20B",NULL +"58.66",58,"PROSTEJOV",NULL,NULL +"58.67",58,"RAKOVNIK","20C",NULL +"58.68",58,"ROKYCANY",NULL,NULL +"58.69",58,"RYCHNOV_NAD_KNEZNOU",NULL,NULL +"58.7",58,"BRUNTAL",NULL,NULL +"58.70",58,"SEMILY",NULL,NULL +"58.71",58,"SOKOLOV",NULL,NULL +"58.72",58,"STRAKONICE",NULL,NULL +"58.73",58,"STREDOCESKY_KRAJ",NULL,NULL +"58.74",58,"SUMPERK",NULL,NULL +"58.75",58,"SVITAVY",NULL,NULL +"58.76",58,"TABOR",NULL,NULL +"58.77",58,"TACHOV",NULL,NULL +"58.78",58,"TEPLICE",NULL,NULL +"58.79",58,"TREBIC",NULL,NULL +"58.8",58,"CESKA_LIPA",NULL,NULL +"58.80",58,"TRUTNOV",NULL,NULL +"58.81",58,"UHERSKE_HRADISTE",NULL,NULL +"58.82",58,"USTECKY_KRAJ",NULL,NULL +"58.83",58,"USTI_NAD_LABEM",NULL,NULL +"58.84",58,"USTI_NAD_ORLICI",NULL,NULL +"58.85",58,"VSETIN",NULL,NULL +"58.86",58,"VYSKOV",NULL,NULL +"58.87",58,"ZDAR_NAD_SAZAVOU",NULL,NULL +"58.88",58,"ZLIN",NULL,NULL +"58.89",58,"ZLINSKY_KRAJ",NULL,NULL +"58.9",58,"CESKE_BUDEJOVICE",NULL,NULL +"58.90",58,"ZNOJMO",NULL,NULL +"59.1",59,"CAPITAL_REGION_OF_DENMARK",NULL,NULL +"59.2",59,"CENTRAL_DENMARK_REGION",NULL,NULL +"59.3",59,"NORTH_DENMARK_REGION",NULL,NULL +"59.4",59,"REGION_OF_SOUTHERN_DENMARK",NULL,NULL +"59.5",59,"REGION_ZEALAND",NULL,NULL +"60.1",60,"ALI_SABIEH_REGION","AS",NULL +"60.2",60,"ARTA_REGION","AR",NULL +"60.3",60,"DIKHIL_REGION","DI",NULL +"60.4",60,"DJIBOUTI","DJ",NULL +"60.5",60,"OBOCK_REGION","OB",NULL +"60.6",60,"TADJOURAH_REGION","TA",NULL +"6.1",6,"ANDORRA_LA_VELLA",NULL,NULL +"61.1",61,"SAINT_ANDREW_PARISH",NULL,NULL +"61.10",61,"SAINT_PETER_PARISH",NULL,NULL +"61.2",61,"SAINT_DAVID_PARISH",NULL,NULL +"61.3",61,"SAINT_GEORGE_PARISH",NULL,NULL +"61.4",61,"SAINT_JOHN_PARISH",NULL,NULL +"61.5",61,"SAINT_JOSEPH_PARISH",NULL,NULL +"61.6",61,"SAINT_LUKE_PARISH",NULL,NULL +"61.7",61,"SAINT_MARK_PARISH",NULL,NULL +"61.8",61,"SAINT_PATRICK_PARISH",NULL,NULL +"61.9",61,"SAINT_PAUL_PARISH",NULL,NULL +"6.2",6,"CANILLO",NULL,NULL +"62.1",62,"AZUA_PROVINCE",NULL,NULL +"62.10",62,"HERMANAS_MIRABAL_PROVINCE",NULL,NULL +"62.11",62,"INDEPENDENCIA",NULL,NULL +"62.12",62,"LA_ALTAGRACIA_PROVINCE",NULL,NULL +"62.13",62,"LA_ROMANA_PROVINCE",NULL,NULL +"62.14",62,"LA_VEGA_PROVINCE",NULL,NULL +"62.15",62,"MARIA_TRINIDAD_SANCHEZ_PROVINCE",NULL,NULL +"62.16",62,"MONSENOR_NOUEL_PROVINCE",NULL,NULL +"62.17",62,"MONTE_CRISTI_PROVINCE",NULL,NULL +"62.18",62,"MONTE_PLATA_PROVINCE",NULL,NULL +"62.19",62,"PEDERNALES_PROVINCE",NULL,NULL +"62.2",62,"BAORUCO_PROVINCE",NULL,NULL +"62.20",62,"PERAVIA_PROVINCE",NULL,NULL +"62.21",62,"PUERTO_PLATA_PROVINCE",NULL,NULL +"62.22",62,"SAMANA_PROVINCE",NULL,NULL +"62.23",62,"SAN_CRISTOBAL_PROVINCE",NULL,NULL +"62.24",62,"SAN_JOSE_DE_OCOA_PROVINCE",NULL,NULL +"62.25",62,"SAN_JUAN_PROVINCE",NULL,NULL +"62.26",62,"SAN_PEDRO_DE_MACORIS",NULL,NULL +"62.27",62,"SANCHEZ_RAMIREZ_PROVINCE",NULL,NULL +"62.28",62,"SANTIAGO_PROVINCE",NULL,NULL +"62.29",62,"SANTIAGO_RODRIGUEZ_PROVINCE",NULL,NULL +"62.3",62,"BARAHONA_PROVINCE",NULL,NULL +"62.30",62,"SANTO_DOMINGO_PROVINCE",NULL,NULL +"62.31",62,"VALVERDE_PROVINCE",NULL,NULL +"62.4",62,"DAJABON_PROVINCE",NULL,NULL +"62.5",62,"DISTRITO_NACIONAL",NULL,NULL +"62.6",62,"DUARTE_PROVINCE",NULL,NULL +"62.7",62,"EL_SEIBO_PROVINCE",NULL,NULL +"62.8",62,"ESPAILLAT_PROVINCE",NULL,NULL +"62.9",62,"HATO_MAYOR_PROVINCE",NULL,NULL +"6.3",6,"ENCAMP",NULL,NULL +"63.1",63,"AILEU_MUNICIPALITY","AL",NULL +"63.10",63,"MANATUTO_DISTRICT","MT",NULL +"63.11",63,"MANUFAHI_MUNICIPALITY","MF",NULL +"63.12",63,"VIQUEQUE_MUNICIPALITY","VI",NULL +"63.2",63,"AINARO_MUNICIPALITY","AN",NULL +"63.3",63,"BAUCAU_MUNICIPALITY","BA",NULL +"63.4",63,"BOBONARO_MUNICIPALITY","BO",NULL +"63.5",63,"COVA_LIMA_MUNICIPALITY","CO",NULL +"63.6",63,"DILI_MUNICIPALITY","DI",NULL +"63.7",63,"ERMERA_DISTRICT","ER",NULL +"63.8",63,"LAUTEM_MUNICIPALITY","LA",NULL +"63.9",63,"LIQUICA_MUNICIPALITY","LI",NULL +"6.4",6,"ESCALDES-ENGORDANY",NULL,NULL +"64.1",64,"AZUAY","A",NULL +"64.10",64,"GUAYAS","G",NULL +"64.11",64,"IMBABURA","I",NULL +"64.12",64,"LOJA","L",NULL +"64.13",64,"LOS_RIOS","R",NULL +"64.14",64,"MANABI","M",NULL +"64.15",64,"MORONA-SANTIAGO","S",NULL +"64.16",64,"NAPO","N",NULL +"64.17",64,"ORELLANA","D",NULL +"64.18",64,"PASTAZA","Y",NULL +"64.19",64,"PICHINCHA","P",NULL +"64.2",64,"BOLIVAR","B",NULL +"64.20",64,"SANTA_ELENA","SE",NULL +"64.21",64,"SANTO_DOMINGO_DE_LOS_TSACHILAS","SD",NULL +"64.22",64,"SUCUMBIOS","U",NULL +"64.23",64,"TUNGURAHUA","T",NULL +"64.24",64,"ZAMORA_CHINCHIPE","Z",NULL +"64.3",64,"CANAR","F",NULL +"64.4",64,"CARCHI","C",NULL +"64.5",64,"CHIMBORAZO","H",NULL +"64.6",64,"COTOPAXI","X",NULL +"64.7",64,"EL_ORO","O",NULL +"64.8",64,"ESMERALDAS","E",NULL +"64.9",64,"GALAPAGOS","W",NULL +"6.5",6,"LA_MASSANA",NULL,NULL +"65.1",65,"ALEXANDRIA","ALX",NULL +"65.10",65,"GHARBIA","GH",NULL +"65.11",65,"GIZA","GZ",NULL +"65.12",65,"ISMAILIA","IS",NULL +"65.13",65,"KAFR_EL-SHEIKH","KFS",NULL +"65.14",65,"LUXOR","LX",NULL +"65.15",65,"MATROUH","MT",NULL +"65.16",65,"MINYA","MN",NULL +"65.17",65,"MONUFIA","MNF",NULL +"65.18",65,"NEW_VALLEY","WAD",NULL +"65.19",65,"NORTH_SINAI","SIN",NULL +"65.2",65,"ASWAN","ASN",NULL +"65.20",65,"PORT_SAID","PTS",NULL +"65.21",65,"QALYUBIA","KB",NULL +"65.22",65,"QENA","KN",NULL +"65.23",65,"RED_SEA","BA",NULL +"65.24",65,"SHARQIA","SHR",NULL +"65.25",65,"SOHAG","SHG",NULL +"65.26",65,"SOUTH_SINAI","JS",NULL +"65.27",65,"SUEZ","SUZ",NULL +"65.3",65,"ASYUT","AST",NULL +"65.4",65,"BEHEIRA","BH",NULL +"65.5",65,"BENI_SUEF","BNS",NULL +"65.6",65,"CAIRO","C",NULL +"65.7",65,"DAKAHLIA","DK",NULL +"65.8",65,"DAMIETTA","DT",NULL +"65.9",65,"FAIYUM","FYM",NULL +"6.6",6,"ORDINO",NULL,NULL +"66.1",66,"AHUACHAPAN_DEPARTMENT","AH",NULL +"66.10",66,"SAN_SALVADOR_DEPARTMENT","SS",NULL +"66.11",66,"SAN_VICENTE_DEPARTMENT","SV",NULL +"66.12",66,"SANTA_ANA_DEPARTMENT","SA",NULL +"66.13",66,"SONSONATE_DEPARTMENT","SO",NULL +"66.14",66,"USULUTAN_DEPARTMENT","US",NULL +"66.2",66,"CABANAS_DEPARTMENT","CA",NULL +"66.3",66,"CHALATENANGO_DEPARTMENT","CH",NULL +"66.4",66,"CUSCATLAN_DEPARTMENT","CU",NULL +"66.5",66,"LA_LIBERTAD_DEPARTMENT","LI",NULL +"66.6",66,"LA_PAZ_DEPARTMENT","PA",NULL +"66.7",66,"LA_UNION_DEPARTMENT","UN",NULL +"66.8",66,"MORAZAN_DEPARTMENT","MO",NULL +"66.9",66,"SAN_MIGUEL_DEPARTMENT","SM",NULL +"6.7",6,"SANT_JULIA_DE_LORIA",NULL,NULL +"67.1",67,"ANNOBON_PROVINCE","AN",NULL +"67.2",67,"BIOKO_NORTE_PROVINCE","BN",NULL +"67.3",67,"BIOKO_SUR_PROVINCE","BS",NULL +"67.4",67,"CENTRO_SUR_PROVINCE","CS",NULL +"67.5",67,"INSULAR_REGION","I",NULL +"67.6",67,"KIE-NTEM_PROVINCE","KN",NULL +"67.7",67,"LITORAL_PROVINCE","LI",NULL +"67.8",67,"RIO_MUNI","C",NULL +"67.9",67,"WELE-NZAS_PROVINCE","WN",NULL +"68.1",68,"ANSEBA_REGION","AN",NULL +"68.2",68,"DEBUB_REGION","DU",NULL +"68.3",68,"GASH-BARKA_REGION","GB",NULL +"68.4",68,"MAEKEL_REGION","MA",NULL +"68.5",68,"NORTHERN_RED_SEA_REGION","SK",NULL +"68.6",68,"SOUTHERN_RED_SEA_REGION","DK",NULL +"69.1",69,"HARJU_COUNTY",NULL,NULL +"69.10",69,"RAPLA_COUNTY",NULL,NULL +"69.11",69,"SAARE_COUNTY",NULL,NULL +"69.12",69,"TARTU_COUNTY",NULL,NULL +"69.13",69,"VALGA_COUNTY",NULL,NULL +"69.14",69,"VILJANDI_COUNTY",NULL,NULL +"69.15",69,"VORU_COUNTY",NULL,NULL +"69.2",69,"HIIU_COUNTY",NULL,NULL +"69.3",69,"IDA-VIRU_COUNTY",NULL,NULL +"69.4",69,"JARVA_COUNTY",NULL,NULL +"69.5",69,"JOGEVA_COUNTY",NULL,NULL +"69.6",69,"LAANE_COUNTY",NULL,NULL +"69.7",69,"LAANE-VIRU_COUNTY",NULL,NULL +"69.8",69,"PARNU_COUNTY",NULL,NULL +"69.9",69,"POLVA_COUNTY",NULL,NULL +"70.1",70,"ADDIS_ABABA","AA",NULL +"70.10",70,"SOUTHERN_NATIONS,_NATIONALITIES,_AND_PEOPLES'_REGION","SN",NULL +"70.11",70,"TIGRAY_REGION","TI",NULL +"70.2",70,"AFAR_REGION","AF",NULL +"70.3",70,"AMHARA_REGION","AM",NULL +"70.4",70,"BENISHANGUL-GUMUZ_REGION","BE",NULL +"70.5",70,"DIRE_DAWA","DD",NULL +"70.6",70,"GAMBELA_REGION","GA",NULL +"70.7",70,"HARARI_REGION","HA",NULL +"70.8",70,"OROMIA_REGION","OR",NULL +"70.9",70,"SOMALI_REGION","SO",NULL +"7.1",7,"BENGO_PROVINCE","BGO",NULL +"7.10",7,"HUILA_PROVINCE","HUI",NULL +"7.11",7,"LUANDA_PROVINCE","LUA",NULL +"7.12",7,"LUNDA_NORTE_PROVINCE","LNO",NULL +"7.13",7,"LUNDA_SUL_PROVINCE","LSU",NULL +"7.14",7,"MALANJE_PROVINCE","MAL",NULL +"7.15",7,"MOXICO_PROVINCE","MOX",NULL +"7.16",7,"UIGE_PROVINCE","UIG",NULL +"7.17",7,"ZAIRE_PROVINCE","ZAI",NULL +"7.2",7,"BENGUELA_PROVINCE","BGU",NULL +"7.3",7,"BIE_PROVINCE","BIE",NULL +"73.1",73,"BA",NULL,NULL +"73.10",73,"NADROGA-NAVOSA",NULL,NULL +"73.11",73,"NAITASIRI",NULL,NULL +"73.12",73,"NAMOSI",NULL,NULL +"73.13",73,"NORTHERN_DIVISION","N",NULL +"73.14",73,"RA",NULL,NULL +"73.15",73,"REWA",NULL,NULL +"73.16",73,"ROTUMA","R",NULL +"73.17",73,"SERUA",NULL,NULL +"73.18",73,"TAILEVU",NULL,NULL +"73.19",73,"WESTERN_DIVISION","W",NULL +"73.2",73,"BUA",NULL,NULL +"73.3",73,"CAKAUDROVE",NULL,NULL +"73.4",73,"CENTRAL_DIVISION","C",NULL +"73.5",73,"EASTERN_DIVISION","E",NULL +"73.6",73,"KADAVU",NULL,NULL +"73.7",73,"LAU",NULL,NULL +"73.8",73,"LOMAIVITI",NULL,NULL +"73.9",73,"MACUATA",NULL,NULL +"7.4",7,"CABINDA_PROVINCE","CAB",NULL +"74.1",74,"ALAND_ISLANDS",NULL,NULL +"74.10",74,"NORTHERN_SAVONIA",NULL,NULL +"74.11",74,"OSTROBOTHNIA",NULL,NULL +"74.12",74,"PAIJANNE_TAVASTIA",NULL,NULL +"74.13",74,"PIRKANMAA",NULL,NULL +"74.14",74,"SATAKUNTA",NULL,NULL +"74.15",74,"SOUTH_KARELIA",NULL,NULL +"74.16",74,"SOUTHERN_OSTROBOTHNIA",NULL,NULL +"74.17",74,"SOUTHERN_SAVONIA",NULL,NULL +"74.18",74,"TAVASTIA_PROPER",NULL,NULL +"74.19",74,"UUSIMAA",NULL,NULL +"74.2",74,"CENTRAL_FINLAND",NULL,NULL +"74.3",74,"CENTRAL_OSTROBOTHNIA",NULL,NULL +"74.4",74,"FINLAND_PROPER",NULL,NULL +"74.5",74,"KAINUU",NULL,NULL +"74.6",74,"KYMENLAAKSO",NULL,NULL +"74.7",74,"LAPLAND",NULL,NULL +"74.8",74,"NORTH_KARELIA",NULL,NULL +"74.9",74,"NORTHERN_OSTROBOTHNIA",NULL,NULL +"7.5",7,"CUANDO_CUBANGO_PROVINCE","CCU",NULL +"75.1",75,"AIN",NULL,NULL +"75.10",75,"AUBE",NULL,NULL +"75.100",75,"RHONE",NULL,NULL +"75.101",75,"SAINT_PIERRE_AND_MIQUELON","PM",NULL +"75.102",75,"SAINT-BARTHELEMY","BL",NULL +"75.103",75,"SAINT-MARTIN","MF",NULL +"75.104",75,"SAONE-ET-LOIRE",NULL,NULL +"75.105",75,"SARTHE",NULL,NULL +"75.106",75,"SAVOIE",NULL,NULL +"75.107",75,"SEINE-ET-MARNE",NULL,NULL +"75.108",75,"SEINE-MARITIME",NULL,NULL +"75.109",75,"SEINE-SAINT-DENIS",NULL,NULL +"75.11",75,"AUDE",NULL,NULL +"75.110",75,"SOMME",NULL,NULL +"75.111",75,"TARN",NULL,NULL +"75.112",75,"TARN-ET-GARONNE",NULL,NULL +"75.113",75,"TERRITOIRE_DE_BELFORT",NULL,NULL +"75.114",75,"VAL-D'OISE",NULL,NULL +"75.115",75,"VAL-DE-MARNE",NULL,NULL +"75.116",75,"VAR",NULL,NULL +"75.117",75,"VAUCLUSE",NULL,NULL +"75.118",75,"VENDEE",NULL,NULL +"75.119",75,"VIENNE",NULL,NULL +"75.12",75,"AUVERGNE-RHONE-ALPES","ARA",NULL +"75.120",75,"VOSGES",NULL,NULL +"75.121",75,"WALLIS_AND_FUTUNA","WF",NULL +"75.122",75,"YONNE",NULL,NULL +"75.123",75,"YVELINES",NULL,NULL +"75.13",75,"AVEYRON",NULL,NULL +"75.14",75,"BAS-RHIN",NULL,NULL +"75.15",75,"BOUCHES-DU-RHONE",NULL,NULL +"75.16",75,"BOURGOGNE-FRANCHE-COMTE","BFC",NULL +"75.17",75,"BRETAGNE","BRE",NULL +"75.18",75,"CALVADOS",NULL,NULL +"75.19",75,"CANTAL",NULL,NULL +"75.2",75,"AISNE",NULL,NULL +"75.20",75,"CENTRE-VAL_DE_LOIRE","CVL",NULL +"75.21",75,"CHARENTE",NULL,NULL +"75.22",75,"CHARENTE-MARITIME",NULL,NULL +"75.23",75,"CHER",NULL,NULL +"75.24",75,"CLIPPERTON","CP",NULL +"75.25",75,"CORREZE",NULL,NULL +"75.26",75,"CORSE","20R",NULL +"75.27",75,"CORSE-DU-SUD","2A",NULL +"75.28",75,"COTE-D'OR",NULL,NULL +"75.29",75,"COTES-D'ARMOR",NULL,NULL +"75.3",75,"ALLIER",NULL,NULL +"75.30",75,"CREUSE",NULL,NULL +"75.31",75,"DEUX-SEVRES",NULL,NULL +"75.32",75,"DORDOGNE",NULL,NULL +"75.33",75,"DOUBS",NULL,NULL +"75.34",75,"DROME",NULL,NULL +"75.35",75,"ESSONNE",NULL,NULL +"75.36",75,"EURE",NULL,NULL +"75.37",75,"EURE-ET-LOIR",NULL,NULL +"75.38",75,"FINISTERE",NULL,NULL +"75.39",75,"FRENCH_GUIANA",NULL,NULL +"75.4",75,"ALPES-DE-HAUTE-PROVENCE",NULL,NULL +"75.40",75,"FRENCH_POLYNESIA","PF",NULL +"75.41",75,"FRENCH_SOUTHERN_AND_ANTARCTIC_LANDS","TF",NULL +"75.42",75,"GARD",NULL,NULL +"75.43",75,"GERS",NULL,NULL +"75.44",75,"GIRONDE",NULL,NULL +"75.45",75,"GRAND-EST","GES",NULL +"75.46",75,"GUADELOUPE",NULL,NULL +"75.47",75,"HAUT-RHIN",NULL,NULL +"75.48",75,"HAUTE-CORSE","2B",NULL +"75.49",75,"HAUTE-GARONNE",NULL,NULL +"75.5",75,"ALPES-MARITIMES",NULL,NULL +"75.50",75,"HAUTE-LOIRE",NULL,NULL +"75.51",75,"HAUTE-MARNE",NULL,NULL +"75.52",75,"HAUTE-SAONE",NULL,NULL +"75.53",75,"HAUTE-SAVOIE",NULL,NULL +"75.54",75,"HAUTE-VIENNE",NULL,NULL +"75.55",75,"HAUTES-ALPES",NULL,NULL +"75.56",75,"HAUTES-PYRENEES",NULL,NULL +"75.57",75,"HAUTS-DE-FRANCE","HDF",NULL +"75.58",75,"HAUTS-DE-SEINE",NULL,NULL +"75.59",75,"HERAULT",NULL,NULL +"75.6",75,"ALSACE","6AE",NULL +"75.60",75,"ILE-DE-FRANCE","IDF",NULL +"75.61",75,"ILLE-ET-VILAINE",NULL,NULL +"75.62",75,"INDRE",NULL,NULL +"75.63",75,"INDRE-ET-LOIRE",NULL,NULL +"75.64",75,"ISERE",NULL,NULL +"75.65",75,"JURA",NULL,NULL +"75.66",75,"LA_REUNION",NULL,NULL +"75.67",75,"LANDES",NULL,NULL +"75.68",75,"LOIR-ET-CHER",NULL,NULL +"75.69",75,"LOIRE",NULL,NULL +"75.7",75,"ARDECHE",NULL,NULL +"75.70",75,"LOIRE-ATLANTIQUE",NULL,NULL +"75.71",75,"LOIRET",NULL,NULL +"75.72",75,"LOT",NULL,NULL +"75.73",75,"LOT-ET-GARONNE",NULL,NULL +"75.74",75,"LOZERE",NULL,NULL +"75.75",75,"MAINE-ET-LOIRE",NULL,NULL +"75.76",75,"MANCHE",NULL,NULL +"75.77",75,"MARNE",NULL,NULL +"75.78",75,"MARTINIQUE",NULL,NULL +"75.79",75,"MAYENNE",NULL,NULL +"75.8",75,"ARDENNES",NULL,NULL +"75.80",75,"MAYOTTE",NULL,NULL +"75.81",75,"METROPOLE_DE_LYON","69M",NULL +"75.82",75,"MEURTHE-ET-MOSELLE",NULL,NULL +"75.83",75,"MEUSE",NULL,NULL +"75.84",75,"MORBIHAN",NULL,NULL +"75.85",75,"MOSELLE",NULL,NULL +"75.86",75,"NIEVRE",NULL,NULL +"75.87",75,"NORD",NULL,NULL +"75.88",75,"NORMANDIE","NOR",NULL +"75.89",75,"NOUVELLE-AQUITAINE","NAQ",NULL +"75.9",75,"ARIEGE",NULL,NULL +"75.90",75,"OCCITANIE","OCC",NULL +"75.91",75,"OISE",NULL,NULL +"75.92",75,"ORNE",NULL,NULL +"75.93",75,"PARIS","75C",NULL +"75.94",75,"PAS-DE-CALAIS",NULL,NULL +"75.95",75,"PAYS-DE-LA-LOIRE","PDL",NULL +"75.96",75,"PROVENCE-ALPES-COTE-D'AZUR","PAC",NULL +"75.97",75,"PUY-DE-DOME",NULL,NULL +"75.98",75,"PYRENEES-ATLANTIQUES",NULL,NULL +"75.99",75,"PYRENEES-ORIENTALES",NULL,NULL +"7.6",7,"CUANZA_NORTE_PROVINCE","CNO",NULL +"7.7",7,"CUANZA_SUL","CUS",NULL +"7.8",7,"CUNENE_PROVINCE","CNN",NULL +"7.9",7,"HUAMBO_PROVINCE","HUA",NULL +"79.1",79,"ESTUAIRE_PROVINCE",NULL,NULL +"79.2",79,"HAUT-OGOOUE_PROVINCE",NULL,NULL +"79.3",79,"MOYEN-OGOOUE_PROVINCE",NULL,NULL +"79.4",79,"NGOUNIE_PROVINCE",NULL,NULL +"79.5",79,"NYANGA_PROVINCE",NULL,NULL +"79.6",79,"OGOOUE-IVINDO_PROVINCE",NULL,NULL +"79.7",79,"OGOOUE-LOLO_PROVINCE",NULL,NULL +"79.8",79,"OGOOUE-MARITIME_PROVINCE",NULL,NULL +"79.9",79,"WOLEU-NTEM_PROVINCE",NULL,NULL +"80.1",80,"BANJUL","B",NULL +"80.2",80,"CENTRAL_RIVER_DIVISION","M",NULL +"80.3",80,"LOWER_RIVER_DIVISION","L",NULL +"80.4",80,"NORTH_BANK_DIVISION","N",NULL +"80.5",80,"UPPER_RIVER_DIVISION","U",NULL +"80.6",80,"WEST_COAST_DIVISION","W",NULL +"81.1",81,"ADJARA","AJ",NULL +"81.10",81,"SAMEGRELO-ZEMO_SVANETI","SZ",NULL +"81.11",81,"SAMTSKHE-JAVAKHETI","SJ",NULL +"81.12",81,"SENAKI_MUNICIPALITY",NULL,NULL +"81.13",81,"SHIDA_KARTLI","SK",NULL +"81.14",81,"TBILISI","TB",NULL +"81.2",81,"AUTONOMOUS_REPUBLIC_OF_ABKHAZIA","AB",NULL +"81.3",81,"GURIA","GU",NULL +"81.4",81,"IMERETI","IM",NULL +"81.5",81,"KAKHETI","KA",NULL +"81.6",81,"KHELVACHAURI_MUNICIPALITY",NULL,NULL +"81.7",81,"KVEMO_KARTLI","KK",NULL +"81.8",81,"MTSKHETA-MTIANETI","MM",NULL +"81.9",81,"RACHA-LECHKHUMI_AND_KVEMO_SVANETI","RL",NULL +"82.1",82,"BADEN-WURTTEMBERG","BW",NULL +"82.10",82,"NORTH_RHINE-WESTPHALIA","NW",NULL +"82.11",82,"RHINELAND-PALATINATE","RP",NULL +"82.12",82,"SAARLAND","SL",NULL +"82.13",82,"SAXONY","SN",NULL +"82.14",82,"SAXONY-ANHALT","ST",NULL +"82.15",82,"SCHLESWIG-HOLSTEIN","SH",NULL +"82.16",82,"THURINGIA","TH",NULL +"82.2",82,"BAVARIA","BY",NULL +"82.3",82,"BERLIN","BE",NULL +"82.4",82,"BRANDENBURG","BB",NULL +"82.5",82,"BREMEN","HB",NULL +"82.6",82,"HAMBURG","HH",NULL +"82.7",82,"HESSE","HE",NULL +"82.8",82,"LOWER_SAXONY","NI",NULL +"82.9",82,"MECKLENBURG-VORPOMMERN","MV",NULL +"83.1",83,"AHAFO","AF",NULL +"83.10",83,"OTI","OT",NULL +"83.11",83,"SAVANNAH","SV",NULL +"83.12",83,"UPPER_EAST","UE",NULL +"83.13",83,"UPPER_WEST","UW",NULL +"83.14",83,"VOLTA","TV",NULL +"83.15",83,"WESTERN","WP",NULL +"83.16",83,"WESTERN_NORTH","WN",NULL +"83.2",83,"ASHANTI","AH",NULL +"83.3",83,"BONO","BO",NULL +"83.4",83,"BONO_EAST","BE",NULL +"83.5",83,"CENTRAL","CP",NULL +"83.6",83,"EASTERN","EP",NULL +"83.7",83,"GREATER_ACCRA","AA",NULL +"83.8",83,"NORTH_EAST","NE",NULL +"83.9",83,"NORTHERN","NP",NULL +"85.1",85,"ACHAEA_REGIONAL_UNIT",NULL,NULL +"85.10",85,"CORFU_PREFECTURE",NULL,NULL +"85.11",85,"CORINTHIA_REGIONAL_UNIT",NULL,NULL +"85.12",85,"CRETE_REGION","M",NULL +"85.13",85,"DRAMA_REGIONAL_UNIT",NULL,NULL +"85.14",85,"EAST_ATTICA_REGIONAL_UNIT","A2",NULL +"85.15",85,"EAST_MACEDONIA_AND_THRACE","A",NULL +"85.16",85,"EPIRUS_REGION","D",NULL +"85.17",85,"EUBOEA",NULL,NULL +"85.18",85,"GREVENA_PREFECTURE",NULL,NULL +"85.19",85,"IMATHIA_REGIONAL_UNIT",NULL,NULL +"85.2",85,"AETOLIA-ACARNANIA_REGIONAL_UNIT",NULL,NULL +"85.20",85,"IOANNINA_REGIONAL_UNIT",NULL,NULL +"85.21",85,"IONIAN_ISLANDS_REGION","F",NULL +"85.22",85,"KARDITSA_REGIONAL_UNIT",NULL,NULL +"85.23",85,"KASTORIA_REGIONAL_UNIT",NULL,NULL +"85.24",85,"KEFALONIA_PREFECTURE",NULL,NULL +"85.25",85,"KILKIS_REGIONAL_UNIT",NULL,NULL +"85.26",85,"KOZANI_PREFECTURE",NULL,NULL +"85.27",85,"LACONIA",NULL,NULL +"85.28",85,"LARISSA_PREFECTURE",NULL,NULL +"85.29",85,"LEFKADA_REGIONAL_UNIT",NULL,NULL +"85.3",85,"ARCADIA_PREFECTURE",NULL,NULL +"85.30",85,"PELLA_REGIONAL_UNIT",NULL,NULL +"85.31",85,"PELOPONNESE_REGION","J",NULL +"85.32",85,"PHTHIOTIS_PREFECTURE",NULL,NULL +"85.33",85,"PREVEZA_PREFECTURE",NULL,NULL +"85.34",85,"SERRES_PREFECTURE",NULL,NULL +"85.35",85,"SOUTH_AEGEAN","L",NULL +"85.36",85,"THESSALONIKI_REGIONAL_UNIT",NULL,NULL +"85.37",85,"WEST_GREECE_REGION","G",NULL +"85.38",85,"WEST_MACEDONIA_REGION","C",NULL +"85.4",85,"ARGOLIS_REGIONAL_UNIT",NULL,NULL +"85.5",85,"ATTICA_REGION","I",NULL +"85.6",85,"BOEOTIA_REGIONAL_UNIT",NULL,NULL +"85.7",85,"CENTRAL_GREECE_REGION","H",NULL +"85.8",85,"CENTRAL_MACEDONIA","B",NULL +"85.9",85,"CHANIA_REGIONAL_UNIT",NULL,NULL +"87.1",87,"CARRIACOU_AND_PETITE_MARTINIQUE",NULL,NULL +"87.2",87,"SAINT_ANDREW_PARISH",NULL,NULL +"87.3",87,"SAINT_DAVID_PARISH",NULL,NULL +"87.4",87,"SAINT_GEORGE_PARISH",NULL,NULL +"87.5",87,"SAINT_JOHN_PARISH",NULL,NULL +"87.6",87,"SAINT_MARK_PARISH",NULL,NULL +"87.7",87,"SAINT_PATRICK_PARISH",NULL,NULL +"90.1",90,"ALTA_VERAPAZ_DEPARTMENT","AV",NULL +"90.10",90,"JALAPA_DEPARTMENT","JA",NULL +"90.11",90,"JUTIAPA_DEPARTMENT","JU",NULL +"90.12",90,"PETEN_DEPARTMENT","PE",NULL +"90.13",90,"QUETZALTENANGO_DEPARTMENT","QZ",NULL +"90.14",90,"QUICHE_DEPARTMENT","QC",NULL +"90.15",90,"RETALHULEU_DEPARTMENT","RE",NULL +"90.16",90,"SACATEPEQUEZ_DEPARTMENT","SA",NULL +"90.17",90,"SAN_MARCOS_DEPARTMENT","SM",NULL +"90.18",90,"SANTA_ROSA_DEPARTMENT","SR",NULL +"90.19",90,"SOLOLA_DEPARTMENT","SO",NULL +"90.2",90,"BAJA_VERAPAZ_DEPARTMENT","BV",NULL +"90.20",90,"SUCHITEPEQUEZ_DEPARTMENT","SU",NULL +"90.21",90,"TOTONICAPAN_DEPARTMENT","TO",NULL +"90.3",90,"CHIMALTENANGO_DEPARTMENT","CM",NULL +"90.4",90,"CHIQUIMULA_DEPARTMENT","CQ",NULL +"90.5",90,"EL_PROGRESO_DEPARTMENT","PR",NULL +"90.6",90,"ESCUINTLA_DEPARTMENT","ES",NULL +"90.7",90,"GUATEMALA_DEPARTMENT","GU",NULL +"90.8",90,"HUEHUETENANGO_DEPARTMENT","HU",NULL +"90.9",90,"IZABAL_DEPARTMENT","IZ",NULL +"92.1",92,"BEYLA_PREFECTURE","BE",NULL +"92.10",92,"DUBREKA_PREFECTURE","DU",NULL +"92.11",92,"FARANAH_PREFECTURE","FA",NULL +"92.12",92,"FORECARIAH_PREFECTURE","FO",NULL +"92.13",92,"FRIA_PREFECTURE","FR",NULL +"92.14",92,"GAOUAL_PREFECTURE","GA",NULL +"92.15",92,"GUECKEDOU_PREFECTURE","GU",NULL +"92.16",92,"KANKAN_PREFECTURE","KA",NULL +"92.17",92,"KANKAN_REGION","K",NULL +"92.18",92,"KEROUANE_PREFECTURE","KE",NULL +"92.19",92,"KINDIA_PREFECTURE","KD",NULL +"92.2",92,"BOFFA_PREFECTURE","BF",NULL +"92.20",92,"KINDIA_REGION","D",NULL +"92.21",92,"KISSIDOUGOU_PREFECTURE","KS",NULL +"92.22",92,"KOUBIA_PREFECTURE","KB",NULL +"92.23",92,"KOUNDARA_PREFECTURE","KN",NULL +"92.24",92,"KOUROUSSA_PREFECTURE","KO",NULL +"92.25",92,"LABE_PREFECTURE","LA",NULL +"92.26",92,"LABE_REGION","L",NULL +"92.27",92,"LELOUMA_PREFECTURE","LE",NULL +"92.28",92,"LOLA_PREFECTURE","LO",NULL +"92.29",92,"MACENTA_PREFECTURE","MC",NULL +"92.3",92,"BOKE_PREFECTURE","BK",NULL +"92.30",92,"MALI_PREFECTURE","ML",NULL +"92.31",92,"MAMOU_PREFECTURE","MM",NULL +"92.32",92,"MAMOU_REGION","M",NULL +"92.33",92,"MANDIANA_PREFECTURE","MD",NULL +"92.34",92,"NZEREKORE_PREFECTURE","NZ",NULL +"92.35",92,"NZEREKORE_REGION","N",NULL +"92.36",92,"PITA_PREFECTURE","PI",NULL +"92.37",92,"SIGUIRI_PREFECTURE","SI",NULL +"92.38",92,"TELIMELE_PREFECTURE","TE",NULL +"92.39",92,"TOUGUE_PREFECTURE","TO",NULL +"92.4",92,"BOKE_REGION","B",NULL +"92.40",92,"YOMOU_PREFECTURE","YO",NULL +"92.5",92,"CONAKRY","C",NULL +"92.6",92,"COYAH_PREFECTURE","CO",NULL +"92.7",92,"DABOLA_PREFECTURE","DB",NULL +"92.8",92,"DALABA_PREFECTURE","DL",NULL +"92.9",92,"DINGUIRAYE_PREFECTURE","DI",NULL +"93.1",93,"BAFATA","BA",NULL +"93.10",93,"SUL_PROVINCE","S",NULL +"93.11",93,"TOMBALI_REGION","TO",NULL +"93.2",93,"BIOMBO_REGION","BM",NULL +"93.3",93,"BOLAMA_REGION","BL",NULL +"93.4",93,"CACHEU_REGION","CA",NULL +"93.5",93,"GABU_REGION","GA",NULL +"93.6",93,"LESTE_PROVINCE","L",NULL +"93.7",93,"NORTE_PROVINCE","N",NULL +"93.8",93,"OIO_REGION","OI",NULL +"93.9",93,"QUINARA_REGION","QU",NULL +"94.1",94,"BARIMA-WAINI","BA",NULL +"94.10",94,"UPPER_TAKUTU-UPPER_ESSEQUIBO","UT",NULL +"94.2",94,"CUYUNI-MAZARUNI","CU",NULL +"94.3",94,"DEMERARA-MAHAICA","DE",NULL +"94.4",94,"EAST_BERBICE-CORENTYNE","EB",NULL +"94.5",94,"ESSEQUIBO_ISLANDS-WEST_DEMERARA","ES",NULL +"94.6",94,"MAHAICA-BERBICE","MA",NULL +"94.7",94,"POMEROON-SUPENAAM","PM",NULL +"94.8",94,"POTARO-SIPARUNI","PT",NULL +"94.9",94,"UPPER_DEMERARA-BERBICE","UD",NULL +"95.1",95,"ARTIBONITE","AR",NULL +"95.10",95,"SUD-EST","SE",NULL +"95.2",95,"CENTRE","CE",NULL +"95.3",95,"GRAND'ANSE","GA",NULL +"95.4",95,"NIPPES","NI",NULL +"95.5",95,"NORD","ND",NULL +"95.6",95,"NORD-EST","NE",NULL +"95.7",95,"NORD-OUEST","NO",NULL +"95.8",95,"OUEST","OU",NULL +"95.9",95,"SUD","SD",NULL +"97.1",97,"ATLANTIDA_DEPARTMENT","AT",NULL +"97.10",97,"GRACIAS_A_DIOS_DEPARTMENT","GD",NULL +"97.11",97,"INTIBUCA_DEPARTMENT","IN",NULL +"97.12",97,"LA_PAZ_DEPARTMENT","LP",NULL +"97.13",97,"LEMPIRA_DEPARTMENT","LE",NULL +"97.14",97,"OCOTEPEQUE_DEPARTMENT","OC",NULL +"97.15",97,"OLANCHO_DEPARTMENT","OL",NULL +"97.16",97,"SANTA_BARBARA_DEPARTMENT","SB",NULL +"97.17",97,"VALLE_DEPARTMENT","VA",NULL +"97.18",97,"YORO_DEPARTMENT","YO",NULL +"97.2",97,"BAY_ISLANDS_DEPARTMENT","IB",NULL +"97.3",97,"CHOLUTECA_DEPARTMENT","CH",NULL +"97.4",97,"COLON_DEPARTMENT","CL",NULL +"97.5",97,"COMAYAGUA_DEPARTMENT","CM",NULL +"97.6",97,"COPAN_DEPARTMENT","CP",NULL +"97.7",97,"CORTES_DEPARTMENT","CR",NULL +"97.8",97,"EL_PARAISO_DEPARTMENT","EP",NULL +"97.9",97,"FRANCISCO_MORAZAN_DEPARTMENT","FM",NULL +"98.1",98,"CENTRAL_AND_WESTERN","HCW",NULL +"98.10",98,"SHAM_SHUI_PO","KSS",NULL +"98.11",98,"SOUTHERN","HSO",NULL +"98.12",98,"TAI_PO","NTP",NULL +"98.13",98,"TSUEN_WAN","NTW",NULL +"98.14",98,"TUEN_MUN","NTM",NULL +"98.15",98,"WAN_CHAI","HWC",NULL +"98.16",98,"WONG_TAI_SIN","KWT",NULL +"98.17",98,"YAU_TSIM_MONG","KYT",NULL +"98.18",98,"YUEN_LONG","NYL",NULL +"98.2",98,"EASTERN","HEA",NULL +"98.3",98,"ISLANDS","NIS",NULL +"98.4",98,"KOWLOON_CITY","KKC",NULL +"98.5",98,"KWAI_TSING","NKT",NULL +"98.6",98,"KWUN_TONG","KKT",NULL +"98.7",98,"NORTH","NNO",NULL +"98.8",98,"SAI_KUNG","NSK",NULL +"98.9",98,"SHA_TIN","NST",NULL +"99.1",99,"BACS-KISKUN","BK",NULL +"99.10",99,"EGER","EG",NULL +"99.11",99,"ERD","ER",NULL +"99.12",99,"FEJER_COUNTY","FE",NULL +"99.13",99,"GYOR","GY",NULL +"99.14",99,"GYOR-MOSON-SOPRON_COUNTY","GS",NULL +"99.15",99,"HAJDU-BIHAR_COUNTY","HB",NULL +"99.16",99,"HEVES_COUNTY","HE",NULL +"99.17",99,"HODMEZOVASARHELY","HV",NULL +"99.18",99,"JASZ-NAGYKUN-SZOLNOK_COUNTY","JN",NULL +"99.19",99,"KAPOSVAR","KV",NULL +"99.2",99,"BARANYA","BA",NULL +"99.20",99,"KECSKEMET","KM",NULL +"99.21",99,"KOMAROM-ESZTERGOM","KE",NULL +"99.22",99,"MISKOLC","MI",NULL +"99.23",99,"NAGYKANIZSA","NK",NULL +"99.24",99,"NOGRAD_COUNTY","NO",NULL +"99.25",99,"NYIREGYHAZA","NY",NULL +"99.26",99,"PECS","PS",NULL +"99.27",99,"PEST_COUNTY","PE",NULL +"99.28",99,"SALGOTARJAN","ST",NULL +"99.29",99,"SOMOGY_COUNTY","SO",NULL +"99.3",99,"BEKES","BE",NULL +"99.30",99,"SOPRON","SN",NULL +"99.31",99,"SZABOLCS-SZATMAR-BEREG_COUNTY","SZ",NULL +"99.32",99,"SZEGED","SD",NULL +"99.33",99,"SZEKESFEHERVAR","SF",NULL +"99.34",99,"SZEKSZARD","SS",NULL +"99.35",99,"SZOLNOK","SK",NULL +"99.36",99,"SZOMBATHELY","SH",NULL +"99.37",99,"TATABANYA","TB",NULL +"99.38",99,"TOLNA_COUNTY","TO",NULL +"99.39",99,"VAS_COUNTY","VA",NULL +"99.4",99,"BEKESCSABA","BC",NULL +"99.40",99,"VESZPREM","VM",NULL +"99.41",99,"VESZPREM_COUNTY","VE",NULL +"99.42",99,"ZALA_COUNTY","ZA",NULL +"99.43",99,"ZALAEGERSZEG","ZE",NULL +"99.5",99,"BORSOD-ABAUJ-ZEMPLEN","BZ",NULL +"99.6",99,"BUDAPEST","BU",NULL +"99.7",99,"CSONGRAD_COUNTY","CS",NULL +"99.8",99,"DEBRECEN","DE",NULL +"99.9",99,"DUNAUJVAROS","DU",NULL diff --git a/database/lookup_tables/supporting_languages.csv b/database/lookup_tables/supporting_languages.csv new file mode 100644 index 0000000..31079ab --- /dev/null +++ b/database/lookup_tables/supporting_languages.csv @@ -0,0 +1,13 @@ +"language_id","language_name","iso_639_1_code","locale_code","writing_direction","total_speakers_m","is_active","created_at","last_updated_at" +"1","English","en","en_US","LTR","1515.0",True,"2025-12-17 01:45:05.345391","2025-12-17 01:45:05.345391" +"2","Mandarin Chinese","zh","zh_CN","LTR","1140.0",True,"2025-12-17 01:45:05.345391","2025-12-17 01:45:05.345391" +"3","Hindi","hi","hi_IN","LTR","609.0",True,"2025-12-17 01:45:05.345391","2025-12-17 01:45:05.345391" +"4","Spanish","es","es_ES","LTR","560.0",True,"2025-12-17 01:45:05.345391","2025-12-17 01:45:05.345391" +"5","French","fr","fr_FR","LTR","312.0",True,"2025-12-17 01:45:05.345391","2025-12-17 01:45:05.345391" +"6","Arabic","ar","ar_SA","RTL","280.0",True,"2025-12-17 01:45:05.345391","2025-12-17 01:45:05.345391" +"7","Bengali","bn","bn_BD","LTR","278.0",True,"2025-12-17 01:45:05.345391","2025-12-17 01:45:05.345391" +"8","Portuguese","pt","pt_PT","LTR","264.0",True,"2025-12-17 01:45:05.345391","2025-12-17 01:45:05.345391" +"9","Russian","ru","ru_RU","LTR","255.0",True,"2025-12-17 01:45:05.345391","2025-12-17 01:45:05.345391" +"10","Urdu","ur","ur_PK","RTL","230.0",True,"2025-12-17 01:45:05.345391","2025-12-17 01:45:05.345391" +"11","German","de","de_DE","LTR","134.0",True,"2025-12-17 01:45:05.345391","2025-12-17 01:45:05.345391" +"12","Telugu","te","te_IN","LTR","96.0",True,"2025-12-17 01:45:05.345391","2025-12-17 01:45:05.345391" diff --git a/database/lookup_tables/user_category.csv b/database/lookup_tables/user_category.csv new file mode 100644 index 0000000..c97e96c --- /dev/null +++ b/database/lookup_tables/user_category.csv @@ -0,0 +1,6 @@ +"user_category_id","user_category","user_category_desc","last_updated_at","user_access_level","category_code","is_deprecated","permissions" +1,"Beneficiary","End-users who submit and manage help requests for themselves or others","2025-12-17 02:56:21.90724+00",1,"BEN",False,"{""track_status"": true, ""delete_request"": true, ""submit_request"": true, ""communicate_with_volunteer"": true}" +2,"Volunteer","Users who assist beneficiaries by accepting and progressing requests","2025-12-17 02:56:21.90724+00",2,"VOL",False,"{""accept_request"": true, ""update_progress"": true, ""become_lead_volunteer"": true}" +3,"Steward","Users who facilitate operations by matching requests and reassigning tasks","2025-12-17 02:56:21.90724+00",3,"STW",False,"{""view_reports"": true, ""match_requests"": true, ""reassign_volunteers"": true, ""query_matched_requests"": true}" +4,"Admin","Users who manage platform settings, user roles, integrations, and dashboards","2025-12-17 02:56:21.90724+00",4,"ADM",False,"{""manage_roles"": true, ""manage_users"": true, ""manage_dashboard"": true, ""manage_integrations"": true}" +5,"Super Admin","Users who oversee admins and handle platform-wide functions like security and backups","2025-12-17 02:56:21.90724+00",5,"SUP",False,"{""manage_admin"": true, ""full_platform_backup_restore"": true}" diff --git a/database/lookup_tables/user_status.csv b/database/lookup_tables/user_status.csv new file mode 100644 index 0000000..7bb5427 --- /dev/null +++ b/database/lookup_tables/user_status.csv @@ -0,0 +1,2 @@ +"user_status_id","user_status","user_status_desc","last_update_date" +"1","ACTIVE",NULL,"2025-08-03 16:31:59.771192+00" diff --git a/database/mock-data-generation/README.md b/database/mock-data-generation/README.md new file mode 100644 index 0000000..4dc453c --- /dev/null +++ b/database/mock-data-generation/README.md @@ -0,0 +1,183 @@ +# Mock Data Generation + +The scripts generate CSV files for the following tables: + +- `volunteer_applications` +- `user_skills` + +# Scripts Overview + +## generate_mock_data.py + +Main script responsible for generating mock data. + +Responsibilities: + +- Calls table-specific data generation scripts +- Maintains relationships between tables +- Writes generated data to CSV files + +Run this script to generate all mock data. + +--- + +## volunteer_applications.py + +Generates synthetic data for the **volunteer_applications** table. + +Fields include: + +- `user_id` +- `terms_and_conditions` +- `terms_accepted_at` +- `govt_id_path` +- `skill_codes` (JSON array) +- `availability` (JSON object) +- `current_page` +- `application_status` +- `is_completed` +- `created_at` +- `last_updated_at` + +Each row represents a volunteer application. + +--- + +## user_skills.py + +Generates data for the **user_skills** table. + +This table is derived from the `skill_codes` field in `volunteer_applications`. + +For each skill associated with a volunteer, a row is created. + +Because volunteers may have multiple skills, this table can contain **more than 100 rows**. + +--- + +## utils.py + +Contains shared helper functions used across scripts. + +Includes: + +- Category ID constants +- Availability options +- Random data generators +- JSON formatting helpers +- Timestamp formatting +- CSV writing utility functions +- Random seed setup + +This keeps the code modular and reusable. + +--- + +# Output Files + +After running the generator script, CSV files will be created + +Generated files: + +### volunteer_applications.csv + +Contains **100 volunteer application records**. + +### user_skills.csv + +Contains skill mappings for volunteers based on `skill_codes`. + +Each skill produces a separate row. + +--- + +# How to Run the Scripts + +Open terminal in VS Code and run: python generate_mock_data.py + +--- + +# What Happens When the Script Runs + +The script will: + +1. Generate **100 volunteer applications** +2. Assign **multiple skills per volunteer** +3. Create matching rows in `user_skills` +4. Maintain table relationships +5. Creates CSV files` + + +--- + +# ๐Ÿ”น Additional Contribution (#119): request_comments & volunteer_rating + +## Overview +This module extends the mock data generation to include: + +- `request_comments` +- `volunteer_rating` + +These tables simulate user interactions such as comments on requests and volunteer feedback ratings. + +--- + +## Script: generate_request_data.py + +This script generates synthetic data for: + +### request_comments +Fields: +- `comment_id` (Primary Key) +- `req_id` (Foreign Key โ†’ request) +- `commenter_id` (Foreign Key โ†’ users) +- `comment_desc` +- `created_at` +- `last_updated_at` +- `isdeleted` + +--- + +### volunteer_rating +Fields: +- `volunteer_rating_id` (Primary Key) +- `user_id` (Foreign Key โ†’ users) +- `request_id` (Foreign Key โ†’ request) +- `rating` (Enum: 1โ€“5) +- `feedback` +- `last_update_date` + +--- + +## Features +- Generates realistic text using Faker +- Maintains referential integrity for user_id and request_id +- Ensures logical timestamp ordering (created_at โ‰ค last_updated_at) +- Supports boolean and enum fields +- Easily scalable for large datasets + +--- + +## How to Run + +Navigate to: database/mock-data-generation +Run : python generate_request_data.py + +--- + +## output Files: + +Genereated files will be in : +database/mock_db/ + + +Files: +- `request_comments.csv` +- `volunteer_rating.csv` + +--- + +## Notes +- Currently generates 100 rows per table (as per acceptance criteria) +- Can be scaled to 40,000+ rows by adjusting configuration +- Data structure follows schema defined in `db_info.json` diff --git a/database/mock-data-generation/db_info.json b/database/mock-data-generation/db_info.json new file mode 100644 index 0000000..1d3373f --- /dev/null +++ b/database/mock-data-generation/db_info.json @@ -0,0 +1,1774 @@ +{ + "schema": "virginia_dev_saayam_rdbms", + "tables": { + "action": { + "columns": [ + { + "name": "action_id", + "type": "integer", + "primary_key": true + }, + { + "name": "action_desc", + "type": "character varying (30)", + "primary_key": false + }, + { + "name": "created_date", + "type": "timestamp without time zone", + "primary_key": false + }, + { + "name": "created_by", + "type": "character varying (30)", + "primary_key": false + }, + { + "name": "last_update_by", + "type": "character varying (30)", + "primary_key": false + }, + { + "name": "last_update_date", + "type": "timestamp without time zone", + "primary_key": false + } + ] + }, + "city": { + "columns": [ + { + "name": "city_id", + "type": "integer", + "primary_key": true + }, + { + "name": "state_id", + "type": "integer", + "primary_key": false + }, + { + "name": "city_name", + "type": "character varying (30)", + "primary_key": false + }, + { + "name": "lattitude", + "type": "numeric (9)", + "primary_key": false + }, + { + "name": "longitude", + "type": "numeric (9)", + "primary_key": false + }, + { + "name": "last_update_date", + "type": "timestamp without time zone", + "primary_key": false + } + ] + }, + "country": { + "columns": [ + { + "name": "country_id", + "type": "integer", + "primary_key": true + }, + { + "name": "country_name", + "type": "character varying (100)", + "primary_key": false + }, + { + "name": "phone_code", + "type": "character varying (5)", + "primary_key": false + }, + { + "name": "country_code", + "type": "character varying (6)", + "primary_key": false + }, + { + "name": "last_update_date", + "type": "timestamp without time zone", + "primary_key": false + }, + { + "name": "is_eu_member", + "type": "boolean", + "primary_key": false + } + ] + }, + "emergency_numbers": { + "columns": [ + { + "name": "en_id", + "type": "integer", + "primary_key": true + }, + { + "name": "country_id", + "type": "integer", + "primary_key": false + }, + { + "name": "state_id", + "type": "character varying (50)", + "primary_key": false + }, + { + "name": "en_name", + "type": "character varying (100)", + "primary_key": false + }, + { + "name": "is_country", + "type": "boolean", + "primary_key": false + }, + { + "name": "police", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "ambulance", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "fire", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "non_emergency", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "cyber_police", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "medicare_support", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "gas_leak", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "electricity_outage", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "water_department", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "disaster_recovery", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "flood_help", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "earthquake_info", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "hurricane_info", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "emergency_mgmt", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "environmental_hazards", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "transportation_assistance", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "roadside_assistance", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "highway_patrol", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "suicide", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "help_women", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "child_abuse", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "domestic_abuse", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "mental_health", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "elderly_abuse", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "poison_control", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "animal_control", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "wildlife_rescue", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "homeless_services", + "type": "character varying (75)", + "primary_key": false + }, + { + "name": "food_assistance", + "type": "character varying (75)", + "primary_key": false + } + ] + }, + "fraud_requests": { + "columns": [ + { + "name": "fraud_request_id", + "type": "integer", + "primary_key": true + }, + { + "name": "user_id", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "request_datetime", + "type": "timestamp without time zone", + "primary_key": false + }, + { + "name": "reason", + "type": "character varying (255)", + "primary_key": false + } + ] + }, + "help_categories": { + "columns": [ + { + "name": "cat_id", + "type": "character varying (50)", + "primary_key": true + }, + { + "name": "cat_name", + "type": "character varying (100)", + "primary_key": false + }, + { + "name": "cat_desc", + "type": "character varying (150)", + "primary_key": false + } + ] + }, + "help_categories_map": { + "columns": [ + { + "name": "parent_id", + "type": "character varying (50)", + "primary_key": false + }, + { + "name": "child_id", + "type": "character varying (50)", + "primary_key": true + } + ] + }, + "identity_type": { + "columns": [ + { + "name": "identity_type_id", + "type": "integer", + "primary_key": true + }, + { + "name": "identity_value", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "identity_type_dsc", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "last_updated_date", + "type": "timestamp without time zone", + "primary_key": false + } + ] + }, + "list_item_metadata": { + "columns": [ + { + "name": "item_id", + "type": "character varying (100)", + "primary_key": true + }, + { + "name": "field_id", + "type": "character varying (70)", + "primary_key": false + }, + { + "name": "item_value", + "type": "character varying (100)", + "primary_key": false + }, + { + "name": "item_type", + "type": "character varying (20)", + "primary_key": false + } + ] + }, + "meeting_participants": { + "columns": [ + { + "name": "meeting_id", + "type": "int", + "primary_key": true + }, + { + "name": "participant_id", + "type": "character varying (255)", + "primary_key": true + } + ] + }, + "meetings": { + "columns": [ + { + "name": "meeting_id", + "type": "int", + "primary_key": true + }, + { + "name": "meeting_date", + "type": "date", + "primary_key": false + }, + { + "name": "start_time", + "type": "timestamp without timezone", + "primary_key": false + }, + { + "name": "end_time", + "type": "timestamp without timezone", + "primary_key": false + }, + { + "name": "cohost_id", + "type": "character varying (255)", + "primary_key": false + } + ] + }, + "news_snippets": { + "columns": [ + { + "name": "news_id", + "type": "int", + "primary_key": true + }, + { + "name": "headline", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "snippet_text", + "type": "text", + "primary_key": false + }, + { + "name": "image_path", + "type": "text", + "primary_key": false + }, + { + "name": "profile_links", + "type": "jsonb", + "primary_key": false + }, + { + "name": "event_date", + "type": "date", + "primary_key": false + }, + { + "name": "created_at", + "type": "timestamp without timezone", + "primary_key": false + }, + { + "name": "last_updated_at", + "type": "timestamp without timezone", + "primary_key": false + } + ] + }, + "notification_channels": { + "columns": [ + { + "name": "channel_id", + "type": "integer", + "primary_key": false + }, + { + "name": "channel_name", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "description", + "type": "text", + "primary_key": false + } + ] + }, + "notification_types": { + "columns": [ + { + "name": "type_id", + "type": "integer", + "primary_key": false + }, + { + "name": "type_name", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "description", + "type": "text", + "primary_key": false + } + ] + }, + "notifications": { + "columns": [ + { + "name": "notification_id", + "type": "integer", + "primary_key": false + }, + { + "name": "user_id", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "type_id", + "type": "integer", + "primary_key": false + }, + { + "name": "channel_id", + "type": "integer", + "primary_key": false + }, + { + "name": "message", + "type": "text", + "primary_key": false + }, + { + "name": "status", + "type": "USER-DEFINED", + "primary_key": false + }, + { + "name": "created_at", + "type": "timestamp without time zone", + "primary_key": false + }, + { + "name": "last_update_date", + "type": "timestamp without time zone", + "primary_key": false + } + ] + }, + "organizations": { + "columns": [ + { + "name": "org_id", + "type": "character varying (255)", + "primary_key": true + }, + { + "name": "org_name", + "type": "character varying (125)", + "primary_key": false + }, + { + "name": "org_type", + "type": "org_type_enum", + "primary_key": false + }, + { + "name": "street", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "city_name", + "type": "character varying (100)", + "primary_key": false + }, + { + "name": "state_code", + "type": "character varying (6)", + "primary_key": false + }, + { + "name": "zip_code", + "type": "character varying (10)", + "primary_key": false + }, + { + "name": "mission", + "type": "text", + "primary_key": false + }, + { + "name": "web_url", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "phone", + "type": "character varying (20)", + "primary_key": false + }, + { + "name": "email", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "size", + "type": "character varying (50)", + "primary_key": false + }, + { + "name": "rating", + "type": "integer", + "primary_key": false + }, + { + "name": "source", + "type": "source_enum", + "primary_key": false + }, + { + "name": "cat_id", + "type": "character varying (50)", + "primary_key": false + }, + { + "name": "created_at", + "type": "timestamp with time zone", + "primary_key": false + }, + { + "name": "last_updated_at", + "type": "timestamp with time zone", + "primary_key": false + } + ] + }, + "req_add_info": { + "columns": [ + { + "name": "request_id", + "type": "character varying (255)", + "primary_key": true + }, + { + "name": "cat_id", + "type": "character varying (50)", + "primary_key": false + }, + { + "name": "field_name_key", + "type": "character varying (100)", + "primary_key": false + }, + { + "name": "field_value", + "type": "text", + "primary_key": false + } + ] + }, + "req_add_info_metadata": { + "columns": [ + { + "name": "field_id", + "type": "character varying (70)", + "primary_key": true + }, + { + "name": "field_name_key", + "type": "character varying (100)", + "primary_key": false + }, + { + "name": "field_type", + "type": "character varying (20)", + "primary_key": false + }, + { + "name": "status", + "type": "character varying (10)", + "primary_key": false + }, + { + "name": "cat_id", + "type": "character varying (50)", + "primary_key": false + } + ] + }, + "request_comments": { + "columns": [ + { + "name": "comment_id", + "type": "bigint", + "primary_key": true + }, + { + "name": "req_id", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "commenter_id", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "comment_desc", + "type": "text", + "primary_key": false + }, + { + "name": "created_at", + "type": "timestamp without timezone", + "primary_key": false + }, + { + "name": "last_updated_at", + "type": "timestamp without timezone", + "primary_key": false + }, + { + "name": "isdeleted", + "type": "boolean", + "primary_key": false + } + ] + }, + "request": { + "columns": [ + { + "name": "req_id", + "type": "character varying (255)", + "primary_key": true + }, + { + "name": "req_user_id", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "req_for_id", + "type": "integer", + "primary_key": false + }, + { + "name": "req_islead_id", + "type": "integer", + "primary_key": false + }, + { + "name": "req_cat_id", + "type": "character varying (50)", + "primary_key": false + }, + { + "name": "req_type_id", + "type": "integer", + "primary_key": false + }, + { + "name": "req_priority_id", + "type": "integer", + "primary_key": false + }, + { + "name": "req_status_id", + "type": "integer", + "primary_key": false + }, + { + "name": "req_loc", + "type": "character varying (125)", + "primary_key": false + }, + { + "name": "iscalamity", + "type": "boolean", + "primary_key": false + }, + { + "name": "req_subj", + "type": "character varying (125)", + "primary_key": false + }, + { + "name": "req_desc", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "req_doc_link", + "type": "text", + "primary_key": false + }, + { + "name": "audio_req_desc", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "submission_date", + "type": "timestamp without time zone", + "primary_key": false + }, + { + "name": "serviced_date", + "type": "timestamp without time zone", + "primary_key": false + }, + { + "name": "last_update_date", + "type": "timestamp without time zone", + "primary_key": false + }, + { + "name": "to_public", + "type": "boolean", + "primary_key": false + } + ] + }, + "request_for": { + "columns": [ + { + "name": "req_for_id", + "type": "integer", + "primary_key": true + }, + { + "name": "req_for", + "type": "character varying (25)", + "primary_key": false + }, + { + "name": "req_for_desc", + "type": "character varying (125)", + "primary_key": false + }, + { + "name": "last_updated_date", + "type": "timestamp without time zone", + "primary_key": false + } + ] + }, + "request_guest_details": { + "columns": [ + { + "name": "req_id", + "type": "character varying (255)", + "primary_key": true + }, + { + "name": "req_fname", + "type": "character varying (100)", + "primary_key": false + }, + { + "name": "req_lname", + "type": "character varying (100)", + "primary_key": false + }, + { + "name": "req_email", + "type": "character varying (100)", + "primary_key": false + }, + { + "name": "req_phone", + "type": "character varying (20)", + "primary_key": false + }, + { + "name": "req_age", + "type": "integer", + "primary_key": false + }, + { + "name": "req_gender", + "type": "character varying (50)", + "primary_key": false + }, + { + "name": "req_pref_lang", + "type": "character varying (50)", + "primary_key": false + } + ] + }, + "request_isleadvol": { + "columns": [ + { + "name": "req_islead_id", + "type": "integer", + "primary_key": true + }, + { + "name": "req_islead", + "type": "character varying (15)", + "primary_key": false + }, + { + "name": "req_islead_desc", + "type": "character varying (100)", + "primary_key": false + }, + { + "name": "last_updated_date", + "type": "timestamp without time zone", + "primary_key": false + } + ] + }, + "request_priority": { + "columns": [ + { + "name": "req_priority_id", + "type": "integer", + "primary_key": true + }, + { + "name": "req_priority", + "type": "character varying (25)", + "primary_key": false + }, + { + "name": "req_priority_desc", + "type": "character varying (125)", + "primary_key": false + }, + { + "name": "last_updated_date", + "type": "timestamp without time zone", + "primary_key": false + } + ] + }, + "request_status": { + "columns": [ + { + "name": "req_status_id", + "type": "integer", + "primary_key": true + }, + { + "name": "req_status", + "type": "character varying (25)", + "primary_key": false + }, + { + "name": "req_status_desc", + "type": "character varying (125)", + "primary_key": false + }, + { + "name": "last_updated_date", + "type": "timestamp without time zone", + "primary_key": false + } + ] + }, + "request_type": { + "columns": [ + { + "name": "req_type_id", + "type": "integer", + "primary_key": true + }, + { + "name": "req_type", + "type": "character varying (25)", + "primary_key": false + }, + { + "name": "req_type_desc", + "type": "character varying (125)", + "primary_key": false + }, + { + "name": "last_updated_date", + "type": "timestamp without time zone", + "primary_key": false + } + ] + }, + "sla": { + "columns": [ + { + "name": "sla_id", + "type": "integer", + "primary_key": true + }, + { + "name": "sla_hours", + "type": "integer", + "primary_key": false + }, + { + "name": "sla_description", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "no_of_cust_impct", + "type": "integer", + "primary_key": false + }, + { + "name": "last_updated_date", + "type": "timestamp without time zone", + "primary_key": false + } + ] + }, + "state": { + "columns": [ + { + "name": "state_id", + "type": "character varying (50)", + "primary_key": false + }, + { + "name": "country_id", + "type": "integer", + "primary_key": false + }, + { + "name": "state_name", + "type": "character varying (100)", + "primary_key": false + }, + { + "name": "state_code", + "type": "character varying (6)", + "primary_key": false + }, + { + "name": "last_update_date", + "type": "timestamp without time zone", + "primary_key": false + } + ] + }, + "supporting_languages": { + "columns": [ + { + "name": "language_id", + "type": "bigint", + "primary_key": true + }, + { + "name": "language_name", + "type": "character varying (64)", + "primary_key": false + }, + { + "name": "iso_639_1_code", + "type": "character (2)", + "primary_key": false + }, + { + "name": "locale_code", + "type": "character varying (10)", + "primary_key": false + }, + { + "name": "writing_direction", + "type": "character varying (3)", + "primary_key": false + }, + { + "name": "total_speakers_m", + "type": "numeric (10)", + "primary_key": false + }, + { + "name": "is_active", + "type": "boolean", + "primary_key": false + }, + { + "name": "created_at", + "type": "timest", + "primary_key": false + }, + { + "name": "last_updated_at", + "type": "timestamp without time zone", + "primary_key": false + } + ] + }, + "user_additional_details": { + "columns": [ + { + "name": "additional_detail_id", + "type": "bigint", + "primary_key": true + }, + { + "name": "user_id", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "secondary_email_1", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "secondary_email_2", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "secondary_phone_1", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "secondary_phone_2", + "type": "character varying (255)", + "primary_key": false + } + ] + }, + "user_availability": { + "columns": [ + { + "name": "user_availability_id", + "type": "integer", + "primary_key": true + }, + { + "name": "user_id", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "day_of_week", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "start_time", + "type": "timestamp with time zone", + "primary_key": false + }, + { + "name": "end_time", + "type": "timestamp with time zone", + "primary_key": false + }, + { + "name": "last_update_date", + "type": "timestamp with time zone", + "primary_key": false + } + ] + }, + "user_category": { + "columns": [ + { + "name": "user_category_id", + "type": "integer", + "primary_key": true + }, + { + "name": "user_category", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "user_category_desc", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "last_update_date", + "type": "timestamp with time zone", + "primary_key": false + }, + { + "name": "user_access_level", + "type": "small int", + "primary_key": false + }, + { + "name": "category_code", + "type": "character varying (50)", + "primary_key": false + }, + { + "name": "is_deprecated", + "type": "boolean", + "primary_key": false + }, + { + "name": "permissions", + "type": "jsonb", + "primary_key": false + } + ] + }, + "user_locations": { + "columns": [ + { + "name": "user_id", + "type": "character varying (255)", + "primary_key": true + }, + { + "name": "prev_loc", + "type": "geography", + "primary_key": false + }, + { + "name": "curr_loc", + "type": "geography", + "primary_key": false + }, + { + "name": "updated_at", + "type": "timestamp with time zone", + "primary_key": false + } + ] + }, + "user_notification_preferences": { + "columns": [ + { + "name": "user_notification_preferences_id", + "type": "integer", + "primary_key": true + }, + { + "name": "user_id", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "channel_id", + "type": "integer", + "primary_key": false + }, + { + "name": "preference", + "type": "USER-DEFINED", + "primary_key": false + } + ] + }, + "user_notification_status": { + "columns": [ + { + "name": "user_id", + "type": "character varying (255)", + "primary_key": true + }, + { + "name": "last_accessed_at", + "type": "timestamp without time zone", + "primary_key": false + } + ] + }, + "user_org_map": { + "columns": [ + { + "name": "user_id", + "type": "character varying (255)", + "primary_key": true + }, + { + "name": "org_id", + "type": "character varying (255)", + "primary_key": true + }, + { + "name": "user_role", + "type": "character varying (50)", + "primary_key": false + }, + { + "name": "created_at", + "type": "timestamp without time zone", + "primary_key": false + }, + { + "name": "last_updated_at", + "type": "timestamp without time zone", + "primary_key": false + } + ] + }, + "user_signoff": { + "columns": [ + { + "name": "signoff_id", + "type": "integer", + "primary_key": true + }, + { + "name": "reason", + "type": "character varying (250)", + "primary_key": false + }, + { + "name": "is_external_auth", + "type": "boolean", + "primary_key": false + } + ] + }, + "user_skills": { + "columns": [ + { + "name": "user_id", + "type": "character varying (255)", + "primary_key": true + }, + { + "name": "cat_id", + "type": "character varying (50)", + "primary_key": true + }, + { + "name": "created_date", + "type": "timestamp without time zone", + "primary_key": false + }, + { + "name": "last_update_date", + "type": "timestamp without time zone", + "primary_key": false + } + ] + }, + "user_status": { + "columns": [ + { + "name": "user_status_id", + "type": "bigint", + "primary_key": true + }, + { + "name": "user_status", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "user_status_desc", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "last_update_date", + "type": "timestamp with time zone (6)", + "primary_key": false + } + ] + }, + "users": { + "columns": [ + { + "name": "user_id", + "type": "character varying (255)", + "primary_key": true + }, + { + "name": "state_id", + "type": "character varying (50)", + "primary_key": false + }, + { + "name": "country_id", + "type": "integer", + "primary_key": false + }, + { + "name": "user_status_id", + "type": "bigint", + "primary_key": false + }, + { + "name": "user_category_id", + "type": "integer", + "primary_key": false + }, + { + "name": "full_name", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "first_name", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "middle_name", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "last_name", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "primary_email_address", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "primary_phone_number", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "addr_ln1", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "addr_ln2", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "addr_ln3", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "city_name", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "zip_code", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "last_location", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "last_update_date", + "type": "timestamp with time zone (6)", + "primary_key": false + }, + { + "name": "time_zone", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "profile_picture_path", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "gender", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "language_1", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "language_2", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "language_3", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "promotion_wizard_stage", + "type": "integer", + "primary_key": false + }, + { + "name": "promotion_wizard_last_update_date", + "type": "timestamp with time zone (6)", + "primary_key": false + }, + { + "name": "external_auth_provider", + "type": "character varying (20)", + "primary_key": false + }, + { + "name": "dob", + "type": "date", + "primary_key": false + } + ] + }, + "volunteer_applications": { + "columns": [ + { + "name": "user_id", + "type": "character varying (255)", + "primary_key": true + }, + { + "name": "terms_and_conditions", + "type": "boolean", + "primary_key": false + }, + { + "name": "terms_accepted_at", + "type": "timestamp without timezone", + "primary_key": false + }, + { + "name": "govt_id_path", + "type": "text", + "primary_key": false + }, + { + "name": "path_updated_at", + "type": "timestamp without timezone", + "primary_key": false + }, + { + "name": "skill_codes", + "type": "json", + "primary_key": false + }, + { + "name": "availability", + "type": "jsonb", + "primary_key": false + }, + { + "name": "current_page", + "type": "integer", + "primary_key": false + }, + { + "name": "application_status", + "type": "User Defined", + "primary_key": false + }, + { + "name": "is_completed", + "type": "boolean", + "primary_key": false + }, + { + "name": "created_at", + "type": "timestamp without timezone", + "primary_key": false + }, + { + "name": "last_updated_at", + "type": "timestamp without timezone", + "primary_key": false + } + ] + }, + "volunteer_details": { + "columns": [ + { + "name": "user_id", + "type": "character varying (255)", + "primary_key": true + }, + { + "name": "terms_and_conditions", + "type": "boolean", + "primary_key": false + }, + { + "name": "terms_accepted_at", + "type": "timestamp without time zone", + "primary_key": false + }, + { + "name": "govt_id_path1", + "type": "text", + "primary_key": false + }, + { + "name": "govt_id_path2", + "type": "text", + "primary_key": false + }, + { + "name": "path1_updated_at", + "type": "timestamp without time zone", + "primary_key": false + }, + { + "name": "path2_updated_at", + "type": "timestamp without time zone", + "primary_key": false + }, + { + "name": "availability_days", + "type": "jsonb", + "primary_key": false + }, + { + "name": "availability_times", + "type": "jsonb", + "primary_key": false + }, + { + "name": "created_at", + "type": "timestamp without time zone", + "primary_key": false + }, + { + "name": "last_updated_at", + "type": "timestamp without time zone", + "primary_key": false + } + ] + }, + "volunteer_locations": { + "columns": [ + { + "name": "user_id", + "type": "character varying (255)", + "primary_key": true + }, + { + "name": "prev_loc", + "type": "geography", + "primary_key": false + }, + { + "name": "curr_loc", + "type": "geography", + "primary_key": false + }, + { + "name": "updated_at", + "type": "timestamp with time zone", + "primary_key": false + } + ] + }, + "volunteer_organizations": { + "columns": [ + { + "name": "volunteer_organization_id", + "type": "integer", + "primary_key": true + }, + { + "name": "contact_id", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "city_name", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "addr_ln1", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "addr_ln2", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "addr_ln3", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "zip_code", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "last_update_date", + "type": "timestamp without time zone", + "primary_key": false + }, + { + "name": "time_zone", + "type": "character varying (255)", + "primary_key": false + } + ] + }, + "volunteer_rating": { + "columns": [ + { + "name": "volunteer_rating_id", + "type": "integer", + "primary_key": true + }, + { + "name": "user_id", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "request_id", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "rating", + "type": "enum", + "primary_key": false + }, + { + "name": "feedback", + "type": "text", + "primary_key": false + }, + { + "name": "last_update_date", + "type": "timestamp without time zone", + "primary_key": false + } + ] + }, + "volunteers_assigned": { + "columns": [ + { + "name": "volunteers_assigned_id", + "type": "integer", + "primary_key": true + }, + { + "name": "request_id", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "volunteer_id", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "volunteer_type", + "type": "character varying (255)", + "primary_key": false + }, + { + "name": "last_update_date", + "type": "timestamp without time zone", + "primary_key": false + } + ] + } + } +} \ No newline at end of file diff --git a/database/mock-data-generation/generate_mock_data.py b/database/mock-data-generation/generate_mock_data.py new file mode 100644 index 0000000..2302c0a --- /dev/null +++ b/database/mock-data-generation/generate_mock_data.py @@ -0,0 +1,26 @@ +import os + +from volunteer_applications import generate_volunteer_applications +from user_skills import generate_user_skills +from utils import set_seed, write_csv + +OUTPUT_DIR = "output_csv_files" + +def main() -> None: + set_seed(42) + + # create folder if it doesn't exist + os.makedirs(OUTPUT_DIR, exist_ok=True) + + volunteer_rows = generate_volunteer_applications(count=100) + user_skill_rows = generate_user_skills(volunteer_rows) + + write_csv(f"{OUTPUT_DIR}/volunteer_applications.csv", volunteer_rows) + write_csv(f"{OUTPUT_DIR}/user_skills.csv", user_skill_rows) + + print(f"Generated {len(volunteer_rows)} volunteer_applications rows") + print(f"Generated {len(user_skill_rows)} user_skills rows") + + +if __name__ == "__main__": + main() diff --git a/database/mock-data-generation/generate_request_data.py b/database/mock-data-generation/generate_request_data.py new file mode 100644 index 0000000..fdd4e1c --- /dev/null +++ b/database/mock-data-generation/generate_request_data.py @@ -0,0 +1,61 @@ +import pandas as pd +import random +from faker import Faker +from datetime import datetime + +fake = Faker() + +# ----------------------------- +# CONFIG +# ----------------------------- +NUM_ROWS = 100 # keep small as per requirement + +# Simulated foreign keys +user_ids = [f"user_{i}" for i in range(1, 501)] +request_ids = [f"req_{i}" for i in range(1, 1001)] + +# ----------------------------- +# request_comments +# ----------------------------- +request_comments = [] + +for i in range(NUM_ROWS): + created = fake.date_time_between(start_date='-1y', end_date='now') + updated = fake.date_time_between(start_date=created, end_date='now') + + request_comments.append({ + "comment_id": i + 1, + "req_id": random.choice(request_ids), + "commenter_id": random.choice(user_ids), + "comment_desc": fake.sentence(nb_words=12), + "created_at": created, + "last_updated_at": updated, + "isdeleted": random.choice([True, False]) + }) + +request_comments_df = pd.DataFrame(request_comments) + +# ----------------------------- +# volunteer_rating +# ----------------------------- +volunteer_rating = [] + +for i in range(NUM_ROWS): + volunteer_rating.append({ + "volunteer_rating_id": i + 1, + "user_id": random.choice(user_ids), + "request_id": random.choice(request_ids), + "rating": random.choice(["1", "2", "3", "4", "5"]), # enum + "feedback": fake.sentence(nb_words=10), + "last_update_date": fake.date_time_between(start_date='-1y', end_date='now') + }) + +volunteer_rating_df = pd.DataFrame(volunteer_rating) + +# ----------------------------- +# SAVE FILES +# ----------------------------- +request_comments_df.to_csv("../mock_db/request_comments.csv", index=False) +volunteer_rating_df.to_csv("../mock_db/volunteer_rating.csv", index=False) + +print("CSV files generated successfully!") \ No newline at end of file diff --git a/database/mock-data-generation/user_skills.csv b/database/mock-data-generation/user_skills.csv new file mode 100644 index 0000000..04d1c3c --- /dev/null +++ b/database/mock-data-generation/user_skills.csv @@ -0,0 +1,303 @@ +user_id,cat_id,created_date,last_update_date +U101,2.4,2026-01-06,2026-01-06 +U101,6,2026-01-06,2026-01-06 +U102,5.1.2,2026-01-06,2026-01-06 +U102,6.6,2026-01-06,2026-01-06 +U103,6.8,2026-01-04,2026-01-04 +U103,3.5,2026-01-04,2026-01-04 +U103,1.3.2,2026-01-04,2026-01-04 +U104,2.1,2026-01-08,2026-01-08 +U104,3.3.7,2026-01-08,2026-01-08 +U104,2.3,2026-01-08,2026-01-08 +U105,3.3.11,2026-01-10,2026-01-10 +U105,5.5,2026-01-10,2026-01-10 +U105,3.3.9,2026-01-10,2026-01-10 +U105,3.3.10,2026-01-10,2026-01-10 +U106,6.3,2026-01-07,2026-01-07 +U106,4.2,2026-01-07,2026-01-07 +U107,4.7,2026-01-12,2026-01-12 +U107,4.3.5,2026-01-12,2026-01-12 +U107,3.3.6,2026-01-12,2026-01-12 +U107,3.2,2026-01-12,2026-01-12 +U108,5.4,2026-01-13,2026-01-13 +U108,3.4,2026-01-13,2026-01-13 +U108,6.1,2026-01-13,2026-01-13 +U109,3.5,2026-01-14,2026-01-14 +U109,5.1.9,2026-01-14,2026-01-14 +U110,6.7,2026-01-11,2026-01-11 +U110,4.3,2026-01-11,2026-01-11 +U111,3.10,2026-01-15,2026-01-15 +U111,5.1.5,2026-01-15,2026-01-15 +U111,6.1,2026-01-15,2026-01-15 +U111,3.3.11,2026-01-15,2026-01-15 +U112,5.3,2026-01-17,2026-01-17 +U112,5.1.2,2026-01-17,2026-01-17 +U112,3.1,2026-01-17,2026-01-17 +U113,4.3.1,2026-01-13,2026-01-13 +U113,2,2026-01-13,2026-01-13 +U114,5.1.10,2026-01-15,2026-01-15 +U114,4.3.4,2026-01-15,2026-01-15 +U114,5.1.1,2026-01-15,2026-01-15 +U114,5,2026-01-15,2026-01-15 +U115,3.3.13,2026-01-15,2026-01-15 +U115,3.7,2026-01-15,2026-01-15 +U115,5.1.4,2026-01-15,2026-01-15 +U116,1.3.4,2026-01-16,2026-01-16 +U116,3.3.11,2026-01-16,2026-01-16 +U116,4.4,2026-01-16,2026-01-16 +U117,6,2026-01-18,2026-01-18 +U117,1.3.4,2026-01-18,2026-01-18 +U117,4.2,2026-01-18,2026-01-18 +U117,1.3.3,2026-01-18,2026-01-18 +U118,3.3.9,2026-01-18,2026-01-18 +U118,6.5,2026-01-18,2026-01-18 +U118,6.7,2026-01-18,2026-01-18 +U118,1.3.2,2026-01-18,2026-01-18 +U119,4.2,2026-01-20,2026-01-20 +U119,2,2026-01-20,2026-01-20 +U119,1.1,2026-01-20,2026-01-20 +U120,3.3.10,2026-01-21,2026-01-21 +U120,5.1.11,2026-01-21,2026-01-21 +U120,6,2026-01-21,2026-01-21 +U121,3.8,2026-01-22,2026-01-22 +U121,6.8,2026-01-22,2026-01-22 +U121,3.3.4,2026-01-22,2026-01-22 +U122,3.5,2026-01-22,2026-01-22 +U122,3.3.10,2026-01-22,2026-01-22 +U123,3.3,2026-01-28,2026-01-28 +U123,5.1.10,2026-01-28,2026-01-28 +U123,3.10,2026-01-28,2026-01-28 +U123,1.3.2,2026-01-28,2026-01-28 +U124,3.3.1,2026-01-29,2026-01-29 +U124,3.3.8,2026-01-29,2026-01-29 +U124,3.3.10,2026-01-29,2026-01-29 +U124,3.3.12,2026-01-29,2026-01-29 +U125,5.1.5,2026-01-27,2026-01-27 +U125,3.3.6,2026-01-27,2026-01-27 +U126,3.7,2026-01-27,2026-01-27 +U126,4.3.3,2026-01-27,2026-01-27 +U127,4.2,2026-01-28,2026-01-28 +U127,5.1.10,2026-01-28,2026-01-28 +U127,6.8,2026-01-28,2026-01-28 +U127,5.2,2026-01-28,2026-01-28 +U128,3.3.3,2026-01-28,2026-01-28 +U128,4.3.5,2026-01-28,2026-01-28 +U128,5.1.10,2026-01-28,2026-01-28 +U128,1.3.5,2026-01-28,2026-01-28 +U129,6.1,2026-02-02,2026-02-02 +U129,3.10,2026-02-02,2026-02-02 +U129,3.3.2,2026-02-02,2026-02-02 +U130,6.8,2026-02-03,2026-02-03 +U130,4.3,2026-02-03,2026-02-03 +U130,5.1.4,2026-02-03,2026-02-03 +U130,5.1.11,2026-02-03,2026-02-03 +U131,3.3.6,2026-02-04,2026-02-04 +U131,3.3.3,2026-02-04,2026-02-04 +U131,3.3,2026-02-04,2026-02-04 +U132,3.3,2026-02-04,2026-02-04 +U132,1,2026-02-04,2026-02-04 +U133,5.1.4,2026-02-02,2026-02-02 +U133,5.4,2026-02-02,2026-02-02 +U134,3.3.9,2026-02-07,2026-02-07 +U134,3.7,2026-02-07,2026-02-07 +U134,5.3,2026-02-07,2026-02-07 +U135,3.3.7,2026-02-06,2026-02-06 +U135,4.5,2026-02-06,2026-02-06 +U136,1.2,2026-02-08,2026-02-08 +U136,6.4,2026-02-08,2026-02-08 +U136,4.4,2026-02-08,2026-02-08 +U136,5.1.6,2026-02-08,2026-02-08 +U137,4.7,2026-02-09,2026-02-09 +U137,3.3.11,2026-02-09,2026-02-09 +U137,5.1.4,2026-02-09,2026-02-09 +U138,4.4,2026-02-07,2026-02-07 +U138,4.3,2026-02-07,2026-02-07 +U138,3.3.5,2026-02-07,2026-02-07 +U139,4.3.3,2026-02-10,2026-02-10 +U139,3.3.6,2026-02-10,2026-02-10 +U140,3.3.5,2026-02-13,2026-02-13 +U140,5.1.4,2026-02-13,2026-02-13 +U140,3.4,2026-02-13,2026-02-13 +U140,4.3.6,2026-02-13,2026-02-13 +U141,3.3.9,2026-02-12,2026-02-12 +U141,2.4,2026-02-12,2026-02-12 +U141,4,2026-02-12,2026-02-12 +U141,6.7,2026-02-12,2026-02-12 +U142,2.4,2026-02-11,2026-02-11 +U142,5.1.10,2026-02-11,2026-02-11 +U142,4.3.5,2026-02-11,2026-02-11 +U143,6.6,2026-02-16,2026-02-16 +U143,3.6,2026-02-16,2026-02-16 +U143,4.3,2026-02-16,2026-02-16 +U143,3.3.9,2026-02-16,2026-02-16 +U144,4.3.4,2026-02-15,2026-02-15 +U144,3.5,2026-02-15,2026-02-15 +U145,5.1.5,2026-02-14,2026-02-14 +U145,5.1.7,2026-02-14,2026-02-14 +U146,6.1,2026-02-17,2026-02-17 +U146,4.3.1,2026-02-17,2026-02-17 +U146,4.3.4,2026-02-17,2026-02-17 +U146,5.1.3,2026-02-17,2026-02-17 +U147,6.7,2026-02-17,2026-02-17 +U147,3.8,2026-02-17,2026-02-17 +U147,2.3,2026-02-17,2026-02-17 +U147,3.3.2,2026-02-17,2026-02-17 +U148,5.1.7,2026-02-19,2026-02-19 +U148,2.4,2026-02-19,2026-02-19 +U148,1.1,2026-02-19,2026-02-19 +U148,6.4,2026-02-19,2026-02-19 +U149,1.3.3,2026-02-18,2026-02-18 +U149,3.3.1,2026-02-18,2026-02-18 +U149,6.3,2026-02-18,2026-02-18 +U149,4,2026-02-18,2026-02-18 +U150,5.1.1,2026-02-23,2026-02-23 +U150,4.1,2026-02-23,2026-02-23 +U150,6.3,2026-02-23,2026-02-23 +U150,1.3.4,2026-02-23,2026-02-23 +U151,5.1.2,2026-02-21,2026-02-21 +U151,6.7,2026-02-21,2026-02-21 +U151,5.1.5,2026-02-21,2026-02-21 +U152,3.6,2026-02-23,2026-02-23 +U152,3.3,2026-02-23,2026-02-23 +U153,5.1.9,2026-02-25,2026-02-25 +U153,6,2026-02-25,2026-02-25 +U153,5.1.8,2026-02-25,2026-02-25 +U154,3.6,2026-02-23,2026-02-23 +U154,6.4,2026-02-23,2026-02-23 +U155,5,2026-02-25,2026-02-25 +U155,4.3.1,2026-02-25,2026-02-25 +U155,4.3,2026-02-25,2026-02-25 +U156,4.2,2026-03-02,2026-03-02 +U156,3.4,2026-03-02,2026-03-02 +U157,5.1.11,2026-03-01,2026-03-01 +U157,1.3.3,2026-03-01,2026-03-01 +U157,3.3.4,2026-03-01,2026-03-01 +U158,5,2026-02-27,2026-02-27 +U158,2.2,2026-02-27,2026-02-27 +U158,3.3.6,2026-02-27,2026-02-27 +U158,3,2026-02-27,2026-02-27 +U159,3.3.2,2026-03-03,2026-03-03 +U159,6.7,2026-03-03,2026-03-03 +U159,5.2,2026-03-03,2026-03-03 +U160,6.6,2026-03-03,2026-03-03 +U160,6.5,2026-03-03,2026-03-03 +U160,5.1.7,2026-03-03,2026-03-03 +U161,4.5,2026-03-05,2026-03-05 +U161,3.3.7,2026-03-05,2026-03-05 +U161,5,2026-03-05,2026-03-05 +U161,1.3.2,2026-03-05,2026-03-05 +U162,5.1.11,2026-03-06,2026-03-06 +U162,2.3,2026-03-06,2026-03-06 +U163,4.3.1,2026-03-07,2026-03-07 +U163,5.5,2026-03-07,2026-03-07 +U164,2.3,2026-03-06,2026-03-06 +U164,5.1.11,2026-03-06,2026-03-06 +U164,3.3.11,2026-03-06,2026-03-06 +U164,4,2026-03-06,2026-03-06 +U165,3.3.11,2026-03-07,2026-03-07 +U165,3.3.12,2026-03-07,2026-03-07 +U166,5.1.4,2026-03-08,2026-03-08 +U166,3.8,2026-03-08,2026-03-08 +U167,2.4,2026-03-13,2026-03-13 +U167,3.3.8,2026-03-13,2026-03-13 +U167,4.4,2026-03-13,2026-03-13 +U168,3.3.7,2026-03-09,2026-03-09 +U168,6.8,2026-03-09,2026-03-09 +U168,4.3.4,2026-03-09,2026-03-09 +U169,1.3.1,2026-03-15,2026-03-15 +U169,6.5,2026-03-15,2026-03-15 +U169,4.3.5,2026-03-15,2026-03-15 +U170,3.6,2026-03-12,2026-03-12 +U170,3.3.11,2026-03-12,2026-03-12 +U170,3.4,2026-03-12,2026-03-12 +U170,5.1.6,2026-03-12,2026-03-12 +U171,1.1,2026-03-13,2026-03-13 +U171,3.5,2026-03-13,2026-03-13 +U171,5.5,2026-03-13,2026-03-13 +U172,4.3,2026-03-13,2026-03-13 +U172,6.9,2026-03-13,2026-03-13 +U172,3.3.6,2026-03-13,2026-03-13 +U172,1.3.5,2026-03-13,2026-03-13 +U173,5.5,2026-03-14,2026-03-14 +U173,3.2,2026-03-14,2026-03-14 +U174,1.3.1,2026-03-18,2026-03-18 +U174,4.3.6,2026-03-18,2026-03-18 +U174,3.3.5,2026-03-18,2026-03-18 +U175,2.2,2026-03-16,2026-03-16 +U175,3.3.5,2026-03-16,2026-03-16 +U175,6.7,2026-03-16,2026-03-16 +U176,6.7,2026-03-17,2026-03-17 +U176,1,2026-03-17,2026-03-17 +U177,6.6,2026-03-18,2026-03-18 +U177,4.3,2026-03-18,2026-03-18 +U178,5.1.9,2026-03-22,2026-03-22 +U178,3.3.6,2026-03-22,2026-03-22 +U178,6.9,2026-03-22,2026-03-22 +U179,5.1.11,2026-03-20,2026-03-20 +U179,2,2026-03-20,2026-03-20 +U179,2.1,2026-03-20,2026-03-20 +U180,3,2026-03-24,2026-03-24 +U180,6.1,2026-03-24,2026-03-24 +U181,3.4,2026-03-25,2026-03-25 +U181,4.3.6,2026-03-25,2026-03-25 +U181,3.3.1,2026-03-25,2026-03-25 +U181,5.1.5,2026-03-25,2026-03-25 +U182,3.1,2026-03-24,2026-03-24 +U182,5,2026-03-24,2026-03-24 +U182,4.3.4,2026-03-24,2026-03-24 +U183,3.3.6,2026-03-26,2026-03-26 +U183,2.4,2026-03-26,2026-03-26 +U183,4.3.3,2026-03-26,2026-03-26 +U184,3.6,2026-03-29,2026-03-29 +U184,1.3,2026-03-29,2026-03-29 +U184,3.3.13,2026-03-29,2026-03-29 +U184,4.1,2026-03-29,2026-03-29 +U185,5.4,2026-03-26,2026-03-26 +U185,3.3.5,2026-03-26,2026-03-26 +U185,4.4,2026-03-26,2026-03-26 +U185,5.1,2026-03-26,2026-03-26 +U186,3.6,2026-03-27,2026-03-27 +U186,5.1.11,2026-03-27,2026-03-27 +U187,5.4,2026-03-30,2026-03-30 +U187,4.1,2026-03-30,2026-03-30 +U187,1.3.2,2026-03-30,2026-03-30 +U188,5.1.10,2026-03-30,2026-03-30 +U188,3.3.12,2026-03-30,2026-03-30 +U188,3.10,2026-03-30,2026-03-30 +U188,4.4,2026-03-30,2026-03-30 +U189,6.4,2026-04-02,2026-04-02 +U189,4.7,2026-04-02,2026-04-02 +U189,5.1,2026-04-02,2026-04-02 +U190,6.6,2026-04-05,2026-04-05 +U190,4.7,2026-04-05,2026-04-05 +U190,5.4,2026-04-05,2026-04-05 +U191,4.3.3,2026-04-01,2026-04-01 +U191,3.3,2026-04-01,2026-04-01 +U191,3.3.8,2026-04-01,2026-04-01 +U192,6.3,2026-04-03,2026-04-03 +U192,4.3,2026-04-03,2026-04-03 +U192,4.2,2026-04-03,2026-04-03 +U192,3.3.1,2026-04-03,2026-04-03 +U193,3.8,2026-04-07,2026-04-07 +U193,2,2026-04-07,2026-04-07 +U193,2.2,2026-04-07,2026-04-07 +U194,5.1.2,2026-04-07,2026-04-07 +U194,2.4,2026-04-07,2026-04-07 +U195,4.3.6,2026-04-06,2026-04-06 +U195,3.8,2026-04-06,2026-04-06 +U195,4.5,2026-04-06,2026-04-06 +U196,6.8,2026-04-08,2026-04-08 +U196,3.3.1,2026-04-08,2026-04-08 +U196,4.3.1,2026-04-08,2026-04-08 +U196,2.1,2026-04-08,2026-04-08 +U197,3.10,2026-04-08,2026-04-08 +U197,5.4,2026-04-08,2026-04-08 +U197,2.2,2026-04-08,2026-04-08 +U198,2,2026-04-09,2026-04-09 +U198,3.9,2026-04-09,2026-04-09 +U199,3.3.11,2026-04-13,2026-04-13 +U199,5.1.11,2026-04-13,2026-04-13 +U199,1.3.2,2026-04-13,2026-04-13 +U199,5,2026-04-13,2026-04-13 +U200,4.3.6,2026-04-11,2026-04-11 +U200,6.4,2026-04-11,2026-04-11 diff --git a/database/mock-data-generation/user_skills.py b/database/mock-data-generation/user_skills.py new file mode 100644 index 0000000..368533d --- /dev/null +++ b/database/mock-data-generation/user_skills.py @@ -0,0 +1,23 @@ +from datetime import datetime, timedelta +from typing import Dict, List + +from utils import build_skill_map, format_date + + +def generate_user_skills(volunteer_rows: List[Dict[str, str]]) -> List[Dict[str, str]]: + skill_map = build_skill_map(volunteer_rows) + rows: List[Dict[str, str]] = [] + + for volunteer_row in volunteer_rows: + user_id = volunteer_row["user_id"] + created_at = datetime.strptime(volunteer_row["created_at"], "%Y-%m-%d %H:%M").date() + + for cat_id in skill_map[user_id]: + rows.append({ + "user_id": user_id, + "cat_id": cat_id, + "created_date": format_date(created_at), + "last_update_date": format_date(created_at + timedelta(days=0)), + }) + + return rows diff --git a/database/mock-data-generation/utils.py b/database/mock-data-generation/utils.py new file mode 100644 index 0000000..c657fb6 --- /dev/null +++ b/database/mock-data-generation/utils.py @@ -0,0 +1,78 @@ +import csv +import json +import random +from datetime import datetime, timedelta +from typing import Any, Dict, List, Sequence + + +def set_seed(seed: int = 42) -> None: + random.seed(seed) + + +CAT_IDS = [ + "0.0.0.0.0","1","1.1","1.2","1.3","1.3.1","1.3.2","1.3.3","1.3.4","1.3.5", + "2","2.1","2.2","2.3","2.4", + "3","3.1","3.10","3.2","3.3","3.3.1","3.3.10","3.3.11","3.3.12","3.3.13","3.3.2","3.3.3","3.3.4","3.3.5","3.3.6","3.3.7","3.3.8","3.3.9","3.4","3.5","3.6","3.7","3.8","3.9", + "4","4.1","4.2","4.3","4.3.1","4.3.2","4.3.3","4.3.4","4.3.5","4.3.6","4.4","4.5","4.6","4.7", + "5","5.1","5.1.1","5.1.10","5.1.11","5.1.2","5.1.3","5.1.4","5.1.5","5.1.6","5.1.7","5.1.8","5.1.9","5.2","5.3","5.4","5.5", + "6","6.1","6.2","6.3","6.4","6.5","6.6","6.7","6.8","6.9" +] +USABLE_CAT_IDS = [c for c in CAT_IDS if c != "0.0.0.0.0"] + +AVAILABILITY_OPTIONS = [ + {"weekdays": "evening"}, + {"weekdays": "morning"}, + {"weekdays": "afternoon"}, + {"weekends": "full_day"}, + {"weekends": "morning", "weekdays": "evening"}, + {"weekdays": ["monday_evening", "wednesday_evening"]}, + {"weekdays": ["tuesday_morning", "thursday_afternoon"]}, + {"weekdays": "flexible", "weekends": "partial"}, +] + +STATUSES = ["DRAFT", "IN_PROGRESS", "SUBMITTED", "UNDER_REVIEW", "APPROVED"] + + +def format_ts(value: datetime) -> str: + return value.strftime("%Y-%m-%d %H:%M") + + +def format_date(value) -> str: + return value.strftime("%Y-%m-%d") + + +def json_text(value: Any) -> str: + return json.dumps(value, separators=(",", ":")) + + +def make_user_ids(count: int, start: int = 101) -> List[str]: + return [f"U{start + i}" for i in range(count)] + + +def build_skill_map(volunteer_rows: Sequence[Dict[str, Any]]) -> Dict[str, List[str]]: + skill_map: Dict[str, List[str]] = {} + for row in volunteer_rows: + skill_map[row["user_id"]] = json.loads(row["skill_codes"]) + return skill_map + + +def write_csv(filename: str, rows: Sequence[Dict[str, Any]]) -> None: + if not rows: + raise ValueError(f"No rows to write for {filename}") + with open(filename, "w", newline="", encoding="utf-8") as file: + writer = csv.DictWriter(file, fieldnames=list(rows[0].keys())) + writer.writeheader() + writer.writerows(rows) + + +def base_created_at() -> datetime: + return datetime(2026, 1, 1, 9, 0, 0) + + +def random_created_at(index: int) -> datetime: + base_date = base_created_at() + return base_date + timedelta( + days=index + random.randint(0, 5), + hours=random.randint(0, 8), + minutes=random.randint(0, 59), + ) diff --git a/database/mock-data-generation/volunteer_applications.csv b/database/mock-data-generation/volunteer_applications.csv new file mode 100644 index 0000000..ed8110d --- /dev/null +++ b/database/mock-data-generation/volunteer_applications.csv @@ -0,0 +1,101 @@ +user_id,terms_and_conditions,terms_accepted_at,govt_id_path,path_updated_at,skill_codes,availability,current_page,application_status,is_completed,created_at,last_updated_at +U101,TRUE,2026-01-06 11:03,/uploads/id/U101.pdf,2026-01-06 12:00,"[""2.4"",""6""]","{""weekdays"":""evening""}",1,SUBMITTED,FALSE,2026-01-06 10:01,2026-01-07 15:14 +U102,TRUE,2026-01-06 15:04,/uploads/id/U102.pdf,2026-01-06 16:51,"[""5.1.2"",""6.6""]","{""weekdays"":""afternoon""}",2,APPROVED,TRUE,2026-01-06 12:45,2026-01-12 22:08 +U103,TRUE,2026-01-04 14:30,/uploads/id/U103.pdf,2026-01-04 16:01,"[""6.8"",""3.5"",""1.3.2""]","{""weekdays"":[""monday_evening"",""wednesday_evening""]}",4,SUBMITTED,TRUE,2026-01-04 14:06,2026-01-06 00:19 +U104,TRUE,2026-01-08 15:34,/uploads/id/U104.pdf,2026-01-08 16:32,"[""2.1"",""3.3.7"",""2.3""]","{""weekends"":""full_day""}",3,SUBMITTED,TRUE,2026-01-08 12:45,2026-01-10 21:54 +U105,TRUE,2026-01-10 16:29,/uploads/id/U105.pdf,2026-01-10 16:47,"[""3.3.11"",""5.5"",""3.3.9"",""3.3.10""]","{""weekdays"":""evening""}",2,SUBMITTED,TRUE,2026-01-10 13:44,2026-01-20 22:40 +U106,TRUE,2026-01-07 10:59,/uploads/id/U106.pdf,2026-01-07 11:15,"[""6.3"",""4.2""]","{""weekends"":""full_day""}",4,SUBMITTED,TRUE,2026-01-07 09:51,2026-01-09 15:23 +U107,TRUE,2026-01-12 20:03,/uploads/id/U107.pdf,2026-01-12 21:52,"[""4.7"",""4.3.5"",""3.3.6"",""3.2""]","{""weekdays"":""afternoon""}",1,SUBMITTED,TRUE,2026-01-12 17:34,2026-01-14 00:32 +U108,TRUE,2026-01-13 17:15,/uploads/id/U108.pdf,2026-01-13 19:47,"[""5.4"",""3.4"",""6.1""]","{""weekends"":""morning"",""weekdays"":""evening""}",1,SUBMITTED,TRUE,2026-01-13 15:38,2026-01-24 04:35 +U109,TRUE,2026-01-14 14:47,/uploads/id/U109.pdf,2026-01-14 16:43,"[""3.5"",""5.1.9""]","{""weekends"":""full_day""}",1,SUBMITTED,TRUE,2026-01-14 14:07,2026-01-24 21:36 +U110,TRUE,2026-01-11 17:03,/uploads/id/U110.pdf,2026-01-11 20:58,"[""6.7"",""4.3""]","{""weekends"":""full_day""}",3,SUBMITTED,TRUE,2026-01-11 14:48,2026-01-16 00:01 +U111,TRUE,2026-01-15 10:22,/uploads/id/U111.pdf,2026-01-15 13:36,"[""3.10"",""5.1.5"",""6.1"",""3.3.11""]","{""weekends"":""full_day""}",4,APPROVED,TRUE,2026-01-15 10:05,2026-01-18 22:24 +U112,TRUE,2026-01-17 16:11,/uploads/id/U112.pdf,2026-01-17 17:46,"[""5.3"",""5.1.2"",""3.1""]","{""weekends"":""full_day""}",1,SUBMITTED,TRUE,2026-01-17 13:25,2026-01-27 02:00 +U113,TRUE,2026-01-13 11:43,/uploads/id/U113.pdf,2026-01-13 12:00,"[""4.3.1"",""2""]","{""weekdays"":""flexible"",""weekends"":""partial""}",4,SUBMITTED,TRUE,2026-01-13 10:45,2026-01-16 20:08 +U114,TRUE,2026-01-15 17:15,/uploads/id/U114.pdf,2026-01-15 17:39,"[""5.1.10"",""4.3.4"",""5.1.1"",""5""]","{""weekdays"":[""monday_evening"",""wednesday_evening""]}",1,UNDER_REVIEW,TRUE,2026-01-15 16:51,2026-01-16 00:25 +U115,TRUE,2026-01-15 14:06,/uploads/id/U115.pdf,2026-01-15 14:41,"[""3.3.13"",""3.7"",""5.1.4""]","{""weekdays"":""evening""}",4,APPROVED,TRUE,2026-01-15 12:12,2026-01-23 15:44 +U116,TRUE,2026-01-16 14:13,/uploads/id/U116.pdf,2026-01-16 15:07,"[""1.3.4"",""3.3.11"",""4.4""]","{""weekdays"":""flexible"",""weekends"":""partial""}",4,SUBMITTED,FALSE,2026-01-16 12:10,2026-01-20 21:51 +U117,TRUE,2026-01-18 12:32,/uploads/id/U117.pdf,2026-01-18 15:00,"[""6"",""1.3.4"",""4.2"",""1.3.3""]","{""weekdays"":""afternoon""}",2,SUBMITTED,TRUE,2026-01-18 12:18,2026-01-18 23:05 +U118,TRUE,2026-01-18 12:26,/uploads/id/U118.pdf,2026-01-18 12:56,"[""3.3.9"",""6.5"",""6.7"",""1.3.2""]","{""weekdays"":[""monday_evening"",""wednesday_evening""]}",3,SUBMITTED,TRUE,2026-01-18 10:43,2026-01-22 16:38 +U119,TRUE,2026-01-20 16:10,/uploads/id/U119.pdf,2026-01-20 17:26,"[""4.2"",""2"",""1.1""]","{""weekends"":""morning"",""weekdays"":""evening""}",1,APPROVED,TRUE,2026-01-20 13:25,2026-01-22 01:39 +U120,TRUE,2026-01-21 15:58,/uploads/id/U120.pdf,2026-01-21 17:32,"[""3.3.10"",""5.1.11"",""6""]","{""weekdays"":""morning""}",1,SUBMITTED,TRUE,2026-01-21 14:56,2026-02-01 01:51 +U121,TRUE,2026-01-22 15:28,/uploads/id/U121.pdf,2026-01-22 16:07,"[""3.8"",""6.8"",""3.3.4""]","{""weekdays"":""evening""}",3,SUBMITTED,TRUE,2026-01-22 13:07,2026-01-30 23:23 +U122,TRUE,2026-01-22 15:53,/uploads/id/U122.pdf,2026-01-22 17:18,"[""3.5"",""3.3.10""]","{""weekdays"":""morning""}",4,SUBMITTED,TRUE,2026-01-22 15:53,2026-01-30 17:25 +U123,TRUE,2026-01-28 13:08,/uploads/id/U123.pdf,2026-01-28 15:37,"[""3.3"",""5.1.10"",""3.10"",""1.3.2""]","{""weekends"":""full_day""}",1,APPROVED,TRUE,2026-01-28 11:34,2026-02-02 19:20 +U124,TRUE,2026-01-29 12:06,/uploads/id/U124.pdf,2026-01-29 14:44,"[""3.3.1"",""3.3.8"",""3.3.10"",""3.3.12""]","{""weekends"":""full_day""}",3,SUBMITTED,TRUE,2026-01-29 10:22,2026-02-05 03:26 +U125,TRUE,2026-01-27 13:27,/uploads/id/U125.pdf,2026-01-27 17:10,"[""5.1.5"",""3.3.6""]","{""weekends"":""full_day""}",3,APPROVED,TRUE,2026-01-27 11:50,2026-02-01 06:05 +U126,TRUE,2026-01-27 11:06,/uploads/id/U126.pdf,2026-01-27 12:17,"[""3.7"",""4.3.3""]","{""weekends"":""morning"",""weekdays"":""evening""}",3,SUBMITTED,TRUE,2026-01-27 09:42,2026-01-27 14:13 +U127,TRUE,2026-01-28 14:53,/uploads/id/U127.pdf,2026-01-28 16:21,"[""4.2"",""5.1.10"",""6.8"",""5.2""]","{""weekdays"":[""tuesday_morning"",""thursday_afternoon""]}",2,UNDER_REVIEW,FALSE,2026-01-28 13:02,2026-02-01 17:06 +U128,TRUE,2026-01-28 20:54,/uploads/id/U128.pdf,2026-01-28 23:58,"[""3.3.3"",""4.3.5"",""5.1.10"",""1.3.5""]","{""weekends"":""morning"",""weekdays"":""evening""}",3,APPROVED,TRUE,2026-01-28 17:59,2026-02-08 01:44 +U129,TRUE,2026-02-02 15:25,/uploads/id/U129.pdf,2026-02-02 18:23,"[""6.1"",""3.10"",""3.3.2""]","{""weekdays"":[""tuesday_morning"",""thursday_afternoon""]}",2,APPROVED,TRUE,2026-02-02 13:42,2026-02-12 03:42 +U130,TRUE,2026-02-03 11:09,/uploads/id/U130.pdf,2026-02-03 14:30,"[""6.8"",""4.3"",""5.1.4"",""5.1.11""]","{""weekends"":""morning"",""weekdays"":""evening""}",4,SUBMITTED,TRUE,2026-02-03 09:19,2026-02-06 00:35 +U131,TRUE,2026-02-04 15:05,/uploads/id/U131.pdf,2026-02-04 17:57,"[""3.3.6"",""3.3.3"",""3.3""]","{""weekdays"":""flexible"",""weekends"":""partial""}",4,SUBMITTED,FALSE,2026-02-04 14:05,2026-02-14 06:01 +U132,TRUE,2026-02-04 14:51,/uploads/id/U132.pdf,2026-02-04 16:33,"[""3.3"",""1""]","{""weekdays"":""flexible"",""weekends"":""partial""}",1,APPROVED,TRUE,2026-02-04 12:45,2026-02-10 19:44 +U133,TRUE,2026-02-02 17:46,/uploads/id/U133.pdf,2026-02-02 19:42,"[""5.1.4"",""5.4""]","{""weekdays"":[""tuesday_morning"",""thursday_afternoon""]}",4,SUBMITTED,TRUE,2026-02-02 17:15,2026-02-12 07:39 +U134,TRUE,2026-02-07 18:58,/uploads/id/U134.pdf,2026-02-07 20:53,"[""3.3.9"",""3.7"",""5.3""]","{""weekends"":""full_day""}",4,SUBMITTED,TRUE,2026-02-07 16:57,2026-02-09 08:11 +U135,TRUE,2026-02-06 14:40,/uploads/id/U135.pdf,2026-02-06 15:15,"[""3.3.7"",""4.5""]","{""weekdays"":""flexible"",""weekends"":""partial""}",1,UNDER_REVIEW,TRUE,2026-02-06 14:20,2026-02-12 21:36 +U136,TRUE,2026-02-08 10:52,/uploads/id/U136.pdf,2026-02-08 14:43,"[""1.2"",""6.4"",""4.4"",""5.1.6""]","{""weekends"":""full_day""}",4,SUBMITTED,FALSE,2026-02-08 09:13,2026-02-14 23:30 +U137,TRUE,2026-02-09 12:24,/uploads/id/U137.pdf,2026-02-09 14:03,"[""4.7"",""3.3.11"",""5.1.4""]","{""weekdays"":""evening""}",1,APPROVED,TRUE,2026-02-09 12:17,2026-02-15 23:39 +U138,TRUE,2026-02-07 15:54,/uploads/id/U138.pdf,2026-02-07 16:06,"[""4.4"",""4.3"",""3.3.5""]","{""weekdays"":[""tuesday_morning"",""thursday_afternoon""]}",4,SUBMITTED,TRUE,2026-02-07 15:08,2026-02-12 04:59 +U139,FALSE,,/uploads/id/U139.pdf,2026-02-10 12:48,"[""4.3.3"",""3.3.6""]","{""weekdays"":""evening""}",1,UNDER_REVIEW,TRUE,2026-02-10 10:30,2026-02-10 16:00 +U140,TRUE,2026-02-13 14:06,/uploads/id/U140.pdf,2026-02-13 14:35,"[""3.3.5"",""5.1.4"",""3.4"",""4.3.6""]","{""weekdays"":""evening""}",1,SUBMITTED,FALSE,2026-02-13 11:15,2026-02-15 18:41 +U141,TRUE,2026-02-12 16:15,/uploads/id/U141.pdf,2026-02-12 16:34,"[""3.3.9"",""2.4"",""4"",""6.7""]","{""weekdays"":[""monday_evening"",""wednesday_evening""]}",1,UNDER_REVIEW,TRUE,2026-02-12 15:25,2026-02-18 01:01 +U142,TRUE,2026-02-11 19:28,/uploads/id/U142.pdf,2026-02-11 22:58,"[""2.4"",""5.1.10"",""4.3.5""]","{""weekends"":""morning"",""weekdays"":""evening""}",2,APPROVED,TRUE,2026-02-11 17:41,2026-02-18 01:44 +U143,TRUE,2026-02-16 19:40,/uploads/id/U143.pdf,2026-02-16 23:11,"[""6.6"",""3.6"",""4.3"",""3.3.9""]","{""weekdays"":[""tuesday_morning"",""thursday_afternoon""]}",4,SUBMITTED,TRUE,2026-02-16 17:49,2026-02-20 11:40 +U144,TRUE,2026-02-15 10:17,/uploads/id/U144.pdf,2026-02-15 12:21,"[""4.3.4"",""3.5""]","{""weekends"":""full_day""}",3,APPROVED,TRUE,2026-02-15 09:31,2026-02-23 12:54 +U145,TRUE,2026-02-14 15:08,/uploads/id/U145.pdf,2026-02-14 18:22,"[""5.1.5"",""5.1.7""]","{""weekends"":""full_day""}",3,SUBMITTED,TRUE,2026-02-14 12:46,2026-02-18 01:06 +U146,TRUE,2026-02-17 15:58,/uploads/id/U146.pdf,2026-02-17 17:46,"[""6.1"",""4.3.1"",""4.3.4"",""5.1.3""]","{""weekdays"":""afternoon""}",1,SUBMITTED,TRUE,2026-02-17 14:30,2026-02-20 22:53 +U147,TRUE,2026-02-17 15:17,/uploads/id/U147.pdf,2026-02-17 18:31,"[""6.7"",""3.8"",""2.3"",""3.3.2""]","{""weekdays"":""afternoon""}",3,SUBMITTED,TRUE,2026-02-17 12:47,2026-02-18 06:05 +U148,TRUE,2026-02-19 12:01,/uploads/id/U148.pdf,2026-02-19 12:33,"[""5.1.7"",""2.4"",""1.1"",""6.4""]","{""weekdays"":""flexible"",""weekends"":""partial""}",3,SUBMITTED,TRUE,2026-02-19 09:03,2026-02-21 12:49 +U149,TRUE,2026-02-18 12:52,/uploads/id/U149.pdf,2026-02-18 15:33,"[""1.3.3"",""3.3.1"",""6.3"",""4""]","{""weekends"":""full_day""}",5,SUBMITTED,FALSE,2026-02-18 10:25,2026-02-25 01:11 +U150,TRUE,2026-02-23 16:44,/uploads/id/U150.pdf,2026-02-23 20:24,"[""5.1.1"",""4.1"",""6.3"",""1.3.4""]","{""weekdays"":""morning""}",2,UNDER_REVIEW,TRUE,2026-02-23 15:28,2026-03-05 23:40 +U151,TRUE,2026-02-21 12:51,/uploads/id/U151.pdf,2026-02-21 12:51,"[""5.1.2"",""6.7"",""5.1.5""]","{""weekends"":""full_day""}",3,SUBMITTED,TRUE,2026-02-21 12:11,2026-02-28 14:34 +U152,TRUE,2026-02-23 13:24,/uploads/id/U152.pdf,2026-02-23 16:09,"[""3.6"",""3.3""]","{""weekends"":""morning"",""weekdays"":""evening""}",3,IN_PROGRESS,FALSE,2026-02-23 12:27,2026-03-05 04:01 +U153,TRUE,2026-02-25 13:28,/uploads/id/U153.pdf,2026-02-25 15:11,"[""5.1.9"",""6"",""5.1.8""]","{""weekdays"":""evening""}",4,SUBMITTED,TRUE,2026-02-25 10:29,2026-03-03 00:27 +U154,TRUE,2026-02-23 15:10,/uploads/id/U154.pdf,2026-02-23 17:40,"[""3.6"",""6.4""]","{""weekends"":""morning"",""weekdays"":""evening""}",4,UNDER_REVIEW,FALSE,2026-02-23 12:43,2026-03-04 04:08 +U155,TRUE,2026-02-25 16:03,/uploads/id/U155.pdf,2026-02-25 18:03,"[""5"",""4.3.1"",""4.3""]","{""weekends"":""morning"",""weekdays"":""evening""}",3,APPROVED,TRUE,2026-02-25 15:40,2026-03-04 05:34 +U156,TRUE,2026-03-02 16:01,/uploads/id/U156.pdf,2026-03-02 17:57,"[""4.2"",""3.4""]","{""weekdays"":""flexible"",""weekends"":""partial""}",4,APPROVED,TRUE,2026-03-02 15:52,2026-03-10 18:39 +U157,TRUE,2026-03-01 11:51,/uploads/id/U157.pdf,2026-03-01 15:04,"[""5.1.11"",""1.3.3"",""3.3.4""]","{""weekdays"":""morning""}",3,SUBMITTED,TRUE,2026-03-01 09:12,2026-03-09 02:35 +U158,TRUE,2026-02-27 15:06,/uploads/id/U158.pdf,2026-02-27 15:09,"[""5"",""2.2"",""3.3.6"",""3""]","{""weekends"":""morning"",""weekdays"":""evening""}",2,SUBMITTED,TRUE,2026-02-27 12:45,2026-03-07 02:27 +U159,TRUE,2026-03-03 18:51,/uploads/id/U159.pdf,2026-03-03 19:28,"[""3.3.2"",""6.7"",""5.2""]","{""weekdays"":[""tuesday_morning"",""thursday_afternoon""]}",1,SUBMITTED,TRUE,2026-03-03 16:30,2026-03-08 08:18 +U160,TRUE,2026-03-03 18:29,/uploads/id/U160.pdf,2026-03-03 21:34,"[""6.6"",""6.5"",""5.1.7""]","{""weekdays"":[""tuesday_morning"",""thursday_afternoon""]}",4,SUBMITTED,TRUE,2026-03-03 17:17,2026-03-09 03:09 +U161,TRUE,2026-03-05 17:53,/uploads/id/U161.pdf,2026-03-05 18:54,"[""4.5"",""3.3.7"",""5"",""1.3.2""]","{""weekdays"":""afternoon""}",4,SUBMITTED,TRUE,2026-03-05 14:55,2026-03-12 05:44 +U162,TRUE,2026-03-06 11:39,/uploads/id/U162.pdf,2026-03-06 13:03,"[""5.1.11"",""2.3""]","{""weekdays"":""morning""}",2,SUBMITTED,TRUE,2026-03-06 09:08,2026-03-12 23:12 +U163,TRUE,2026-03-07 15:02,/uploads/id/U163.pdf,2026-03-07 17:48,"[""4.3.1"",""5.5""]","{""weekdays"":""morning""}",4,SUBMITTED,TRUE,2026-03-07 13:21,2026-03-15 18:27 +U164,TRUE,2026-03-06 15:05,/uploads/id/U164.pdf,2026-03-06 15:30,"[""2.3"",""5.1.11"",""3.3.11"",""4""]","{""weekdays"":[""tuesday_morning"",""thursday_afternoon""]}",1,SUBMITTED,TRUE,2026-03-06 13:14,2026-03-10 20:53 +U165,TRUE,2026-03-07 15:27,/uploads/id/U165.pdf,2026-03-07 18:49,"[""3.3.11"",""3.3.12""]","{""weekdays"":""afternoon""}",5,UNDER_REVIEW,FALSE,2026-03-07 12:33,2026-03-17 22:20 +U166,TRUE,2026-03-08 17:45,/uploads/id/U166.pdf,2026-03-08 20:35,"[""5.1.4"",""3.8""]","{""weekdays"":[""tuesday_morning"",""thursday_afternoon""]}",4,SUBMITTED,TRUE,2026-03-08 16:40,2026-03-14 05:54 +U167,TRUE,2026-03-13 14:19,/uploads/id/U167.pdf,2026-03-13 15:57,"[""2.4"",""3.3.8"",""4.4""]","{""weekends"":""morning"",""weekdays"":""evening""}",3,SUBMITTED,TRUE,2026-03-13 13:29,2026-03-14 02:22 +U168,TRUE,2026-03-09 12:05,/uploads/id/U168.pdf,2026-03-09 15:38,"[""3.3.7"",""6.8"",""4.3.4""]","{""weekdays"":""afternoon""}",3,SUBMITTED,TRUE,2026-03-09 09:58,2026-03-20 04:24 +U169,TRUE,2026-03-15 11:07,/uploads/id/U169.pdf,2026-03-15 12:26,"[""1.3.1"",""6.5"",""4.3.5""]","{""weekdays"":""afternoon""}",3,SUBMITTED,TRUE,2026-03-15 10:57,2026-03-20 23:52 +U170,TRUE,2026-03-12 13:23,/uploads/id/U170.pdf,2026-03-12 15:38,"[""3.6"",""3.3.11"",""3.4"",""5.1.6""]","{""weekdays"":""afternoon""}",3,SUBMITTED,TRUE,2026-03-12 11:50,2026-03-13 22:42 +U171,TRUE,2026-03-13 17:27,/uploads/id/U171.pdf,2026-03-13 17:50,"[""1.1"",""3.5"",""5.5""]","{""weekdays"":[""monday_evening"",""wednesday_evening""]}",3,SUBMITTED,FALSE,2026-03-13 15:54,2026-03-23 00:42 +U172,FALSE,,/uploads/id/U172.pdf,2026-03-13 16:16,"[""4.3"",""6.9"",""3.3.6"",""1.3.5""]","{""weekdays"":""afternoon""}",3,SUBMITTED,TRUE,2026-03-13 12:30,2026-03-23 22:23 +U173,TRUE,2026-03-14 09:48,/uploads/id/U173.pdf,2026-03-14 10:12,"[""5.5"",""3.2""]","{""weekdays"":""afternoon""}",4,SUBMITTED,TRUE,2026-03-14 09:19,2026-03-23 21:58 +U174,TRUE,2026-03-18 12:37,/uploads/id/U174.pdf,2026-03-18 16:37,"[""1.3.1"",""4.3.6"",""3.3.5""]","{""weekdays"":[""monday_evening"",""wednesday_evening""]}",3,APPROVED,TRUE,2026-03-18 10:53,2026-03-20 03:00 +U175,TRUE,2026-03-16 15:48,/uploads/id/U175.pdf,2026-03-16 19:25,"[""2.2"",""3.3.5"",""6.7""]","{""weekends"":""full_day""}",3,SUBMITTED,TRUE,2026-03-16 15:17,2026-03-19 22:15 +U176,TRUE,2026-03-17 18:12,/uploads/id/U176.pdf,2026-03-17 19:36,"[""6.7"",""1""]","{""weekdays"":""afternoon""}",2,APPROVED,TRUE,2026-03-17 17:13,2026-03-26 00:27 +U177,FALSE,,/uploads/id/U177.pdf,2026-03-18 12:30,"[""6.6"",""4.3""]","{""weekdays"":""morning""}",2,SUBMITTED,FALSE,2026-03-18 09:08,2026-03-24 20:37 +U178,TRUE,2026-03-22 19:20,/uploads/id/U178.pdf,2026-03-22 19:47,"[""5.1.9"",""3.3.6"",""6.9""]","{""weekdays"":""evening""}",5,UNDER_REVIEW,FALSE,2026-03-22 16:49,2026-03-27 03:28 +U179,TRUE,2026-03-20 19:49,/uploads/id/U179.pdf,2026-03-20 20:16,"[""5.1.11"",""2"",""2.1""]","{""weekdays"":[""monday_evening"",""wednesday_evening""]}",2,SUBMITTED,TRUE,2026-03-20 16:54,2026-03-25 05:56 +U180,TRUE,2026-03-24 19:52,/uploads/id/U180.pdf,2026-03-24 21:42,"[""3"",""6.1""]","{""weekdays"":""flexible"",""weekends"":""partial""}",4,SUBMITTED,TRUE,2026-03-24 17:18,2026-03-28 04:03 +U181,TRUE,2026-03-25 17:35,/uploads/id/U181.pdf,2026-03-25 18:55,"[""3.4"",""4.3.6"",""3.3.1"",""5.1.5""]","{""weekdays"":[""monday_evening"",""wednesday_evening""]}",1,UNDER_REVIEW,FALSE,2026-03-25 15:46,2026-03-31 20:42 +U182,TRUE,2026-03-24 19:26,/uploads/id/U182.pdf,2026-03-24 21:49,"[""3.1"",""5"",""4.3.4""]","{""weekends"":""morning"",""weekdays"":""evening""}",4,APPROVED,TRUE,2026-03-24 17:03,2026-03-25 02:27 +U183,TRUE,2026-03-26 11:15,/uploads/id/U183.pdf,2026-03-26 14:03,"[""3.3.6"",""2.4"",""4.3.3""]","{""weekdays"":[""tuesday_morning"",""thursday_afternoon""]}",3,SUBMITTED,TRUE,2026-03-26 10:36,2026-04-04 17:54 +U184,TRUE,2026-03-29 19:49,/uploads/id/U184.pdf,2026-03-29 23:21,"[""3.6"",""1.3"",""3.3.13"",""4.1""]","{""weekdays"":[""tuesday_morning"",""thursday_afternoon""]}",2,SUBMITTED,TRUE,2026-03-29 17:01,2026-04-01 09:03 +U185,TRUE,2026-03-26 11:54,/uploads/id/U185.pdf,2026-03-26 12:17,"[""5.4"",""3.3.5"",""4.4"",""5.1""]","{""weekdays"":""morning""}",3,SUBMITTED,TRUE,2026-03-26 11:47,2026-04-01 00:53 +U186,TRUE,2026-03-27 11:22,/uploads/id/U186.pdf,2026-03-27 14:14,"[""3.6"",""5.1.11""]","{""weekdays"":""morning""}",4,SUBMITTED,TRUE,2026-03-27 11:10,2026-04-02 18:27 +U187,TRUE,2026-03-30 18:00,/uploads/id/U187.pdf,2026-03-30 20:31,"[""5.4"",""4.1"",""1.3.2""]","{""weekends"":""full_day""}",1,APPROVED,TRUE,2026-03-30 15:07,2026-03-30 23:50 +U188,TRUE,2026-03-30 13:19,/uploads/id/U188.pdf,2026-03-30 15:26,"[""5.1.10"",""3.3.12"",""3.10"",""4.4""]","{""weekdays"":""evening""}",3,SUBMITTED,TRUE,2026-03-30 13:18,2026-03-31 22:21 +U189,TRUE,2026-04-02 10:49,/uploads/id/U189.pdf,2026-04-02 13:16,"[""6.4"",""4.7"",""5.1""]","{""weekdays"":""flexible"",""weekends"":""partial""}",3,SUBMITTED,TRUE,2026-04-02 09:29,2026-04-05 01:55 +U190,TRUE,2026-04-05 14:32,/uploads/id/U190.pdf,2026-04-05 15:34,"[""6.6"",""4.7"",""5.4""]","{""weekdays"":""afternoon""}",3,UNDER_REVIEW,FALSE,2026-04-05 14:05,2026-04-08 21:23 +U191,TRUE,2026-04-01 19:50,/uploads/id/U191.pdf,2026-04-01 20:39,"[""4.3.3"",""3.3"",""3.3.8""]","{""weekdays"":""morning""}",2,SUBMITTED,FALSE,2026-04-01 17:40,2026-04-10 23:27 +U192,TRUE,2026-04-03 18:57,/uploads/id/U192.pdf,2026-04-03 20:51,"[""6.3"",""4.3"",""4.2"",""3.3.1""]","{""weekdays"":[""monday_evening"",""wednesday_evening""]}",3,SUBMITTED,TRUE,2026-04-03 16:29,2026-04-08 05:54 +U193,TRUE,2026-04-07 10:28,/uploads/id/U193.pdf,2026-04-07 10:42,"[""3.8"",""2"",""2.2""]","{""weekdays"":""evening""}",4,SUBMITTED,TRUE,2026-04-07 10:19,2026-04-16 19:32 +U194,TRUE,2026-04-07 14:28,/uploads/id/U194.pdf,2026-04-07 15:06,"[""5.1.2"",""2.4""]","{""weekdays"":""evening""}",1,APPROVED,TRUE,2026-04-07 12:20,2026-04-16 01:17 +U195,TRUE,2026-04-06 19:04,/uploads/id/U195.pdf,2026-04-06 19:44,"[""4.3.6"",""3.8"",""4.5""]","{""weekdays"":""morning""}",1,SUBMITTED,TRUE,2026-04-06 16:28,2026-04-17 06:05 +U196,TRUE,2026-04-08 11:47,/uploads/id/U196.pdf,2026-04-08 12:51,"[""6.8"",""3.3.1"",""4.3.1"",""2.1""]","{""weekdays"":[""tuesday_morning"",""thursday_afternoon""]}",3,SUBMITTED,TRUE,2026-04-08 10:35,2026-04-12 23:35 +U197,TRUE,2026-04-08 13:03,/uploads/id/U197.pdf,2026-04-08 16:25,"[""3.10"",""5.4"",""2.2""]","{""weekdays"":""afternoon""}",3,SUBMITTED,TRUE,2026-04-08 10:19,2026-04-08 21:44 +U198,TRUE,2026-04-09 15:46,/uploads/id/U198.pdf,2026-04-09 16:21,"[""2"",""3.9""]","{""weekdays"":""afternoon""}",1,SUBMITTED,TRUE,2026-04-09 14:49,2026-04-19 22:17 +U199,TRUE,2026-04-13 18:06,/uploads/id/U199.pdf,2026-04-13 21:23,"[""3.3.11"",""5.1.11"",""1.3.2"",""5""]","{""weekdays"":""flexible"",""weekends"":""partial""}",4,UNDER_REVIEW,TRUE,2026-04-13 15:09,2026-04-23 02:11 +U200,TRUE,2026-04-11 19:15,/uploads/id/U200.pdf,2026-04-11 23:06,"[""4.3.6"",""6.4""]","{""weekdays"":[""tuesday_morning"",""thursday_afternoon""]}",3,SUBMITTED,TRUE,2026-04-11 17:15,2026-04-18 07:39 diff --git a/database/mock-data-generation/volunteer_applications.py b/database/mock-data-generation/volunteer_applications.py new file mode 100644 index 0000000..fe4ea0b --- /dev/null +++ b/database/mock-data-generation/volunteer_applications.py @@ -0,0 +1,60 @@ +import random +from datetime import timedelta +from typing import Dict, List + +from utils import ( + AVAILABILITY_OPTIONS, + STATUSES, + USABLE_CAT_IDS, + format_ts, + json_text, + make_user_ids, + random_created_at, +) + + +def generate_volunteer_applications(count: int = 100) -> List[Dict[str, str]]: + rows: List[Dict[str, str]] = [] + user_ids = make_user_ids(count) + + for index, user_id in enumerate(user_ids): + created_at = random_created_at(index) + + terms_and_conditions = random.random() > 0.03 + terms_accepted_at = created_at + timedelta(minutes=random.randint(0, 180)) if terms_and_conditions else None + path_updated_at = (terms_accepted_at or created_at) + timedelta(minutes=random.randint(0, 240)) + + skill_count = random.randint(2, 4) + skills = random.sample(USABLE_CAT_IDS, skill_count) + + is_completed = random.random() > 0.18 + application_status = random.choices(STATUSES, weights=[5, 12, 45, 20, 18], k=1)[0] + + if is_completed and application_status in {"DRAFT", "IN_PROGRESS"}: + application_status = "SUBMITTED" + if not is_completed and application_status == "APPROVED": + application_status = "UNDER_REVIEW" + + current_page = random.randint(1, 5 if not is_completed else 4) + last_updated_at = path_updated_at + timedelta( + days=random.randint(0, 10), + hours=random.randint(0, 12), + minutes=random.randint(0, 59), + ) + + rows.append({ + "user_id": user_id, + "terms_and_conditions": str(terms_and_conditions).upper(), + "terms_accepted_at": format_ts(terms_accepted_at) if terms_accepted_at else "", + "govt_id_path": f"/uploads/id/{user_id}.pdf", + "path_updated_at": format_ts(path_updated_at), + "skill_codes": json_text(skills), + "availability": json_text(random.choice(AVAILABILITY_OPTIONS)), + "current_page": current_page, + "application_status": application_status, + "is_completed": str(is_completed).upper(), + "created_at": format_ts(created_at), + "last_updated_at": format_ts(last_updated_at), + }) + + return rows diff --git a/database/mock_db/request_comments.csv b/database/mock_db/request_comments.csv new file mode 100644 index 0000000..08143cf --- /dev/null +++ b/database/mock_db/request_comments.csv @@ -0,0 +1,101 @@ +comment_id,req_id,commenter_id,comment_desc,created_at,last_updated_at,isdeleted +1,req_285,user_171,From get low kitchen history else great officer future account store friend three relate range ready.,2025-09-04 12:47:36,2026-03-30 04:02:32,False +2,req_403,user_257,Sit change throw degree school show way factor budget dog American reflect onto.,2025-11-20 16:05:56,2026-03-10 22:14:50,True +3,req_589,user_43,As owner scientist join reality technology hospital dark board scientist give series.,2026-04-10 17:37:34,2026-04-27 19:20:16,True +4,req_664,user_228,Before help worker possible raise home condition single.,2025-12-28 14:27:48,2026-01-27 04:31:05,True +5,req_886,user_65,Notice resource until leave who catch book fast.,2025-05-19 16:38:40,2025-10-25 10:30:23,False +6,req_391,user_75,Consumer spend under animal baby however break too body.,2025-09-06 14:35:22,2025-11-03 19:24:30,True +7,req_662,user_45,Couple wind item find computer hair mention throw land return firm recent.,2026-01-10 16:30:32,2026-02-17 13:40:10,True +8,req_306,user_455,Position operation eat generation course spend positive.,2025-05-31 00:37:34,2025-09-09 09:43:13,True +9,req_529,user_121,Prevent call consider strong within resource including decide owner late across floor call place organization.,2026-03-13 18:28:40,2026-03-15 03:01:35,False +10,req_437,user_312,Few determine off relationship together skin however kid.,2025-11-01 19:09:31,2026-04-20 21:37:56,False +11,req_511,user_21,Detail ok none record somebody remain let forward new.,2025-08-30 11:06:31,2026-01-06 20:07:10,False +12,req_405,user_384,Their data nor face serious level former receive.,2025-12-23 19:03:38,2026-02-01 14:28:20,True +13,req_405,user_142,Drive woman matter which eat order Democrat rock population worry.,2025-05-16 02:07:10,2025-06-20 15:28:31,True +14,req_96,user_313,Factor forget want argue foreign course page opportunity center population none person sing.,2026-01-09 21:07:54,2026-01-09 21:53:53,False +15,req_483,user_205,Entire south Congress nearly that relate key theory yeah drug.,2025-05-04 14:19:53,2026-04-02 23:24:12,False +16,req_573,user_31,Grow big beat occur though million price movement back none often finish measure.,2025-08-12 00:25:31,2026-01-29 23:10:00,False +17,req_137,user_443,Only memory Republican about water sort daughter join scientist.,2026-05-02 09:11:39,2026-05-04 05:29:57,False +18,req_298,user_418,Already many base every a knowledge health rule at car time send.,2026-02-16 09:38:26,2026-03-28 09:46:43,False +19,req_178,user_132,Poor free several list interesting small when democratic my student machine around.,2026-03-30 18:01:56,2026-03-31 04:32:27,False +20,req_627,user_45,Safe adult fund development alone herself human much indicate floor.,2025-06-23 01:35:15,2025-09-15 15:38:18,True +21,req_349,user_330,Character smile approach term firm produce nice experience trade situation similar throughout.,2025-10-21 22:24:23,2026-04-15 05:20:06,False +22,req_9,user_276,Last impact human onto tonight fact politics.,2026-01-08 22:58:06,2026-03-30 02:36:18,True +23,req_539,user_488,Campaign owner onto couple population child wrong around official reason before popular.,2025-12-31 15:39:28,2026-04-25 20:16:33,False +24,req_211,user_33,We mention contain lawyer offer civil writer.,2025-06-02 22:40:57,2025-12-29 12:50:18,True +25,req_611,user_452,Sit either represent set security game exactly capital yourself particularly me prevent month.,2025-08-12 20:05:20,2026-03-23 11:45:12,False +26,req_94,user_273,Nation single protect this final allow especially lay course nice fact film various.,2025-06-28 00:07:45,2025-10-22 17:31:46,False +27,req_695,user_270,Nice discussion offer four surface figure only per some magazine month success.,2025-10-14 02:40:58,2025-11-09 08:04:56,False +28,req_931,user_440,Food music those bar fast read own.,2025-06-01 13:06:11,2025-06-13 10:39:43,False +29,req_707,user_53,During trade second let pass man never public though house bad.,2026-04-09 12:43:09,2026-04-13 05:38:09,True +30,req_244,user_372,Almost teach career particular wide feeling section position difference really concern man.,2026-02-03 06:47:51,2026-02-08 19:08:13,True +31,req_447,user_336,New hand policy leader daughter wear born company green kind night.,2025-12-18 08:39:25,2026-01-28 10:54:26,False +32,req_635,user_404,Nor practice economic become cut contain measure scene part.,2025-10-24 01:33:08,2026-03-02 18:51:19,False +33,req_761,user_115,Probably go nearly produce among late hot debate population home teacher moment.,2026-03-15 08:13:04,2026-04-24 12:46:20,False +34,req_855,user_376,Because operation own on season pattern economy goal individual something blood reflect up sure upon determine.,2025-06-11 23:53:02,2026-01-07 23:17:11,True +35,req_44,user_159,Leader see whether administration should discuss store bar bag hot hope capital.,2025-08-13 01:59:04,2025-09-24 13:06:15,False +36,req_614,user_96,Card current card minute cost growth character peace him floor seem say friend audience rise.,2026-02-07 21:35:26,2026-02-10 00:37:03,False +37,req_136,user_475,Cover model wish decade other center call.,2025-07-08 13:20:25,2025-12-23 05:00:50,True +38,req_162,user_360,Event yourself center we answer whom large cover report.,2026-02-18 10:11:12,2026-03-15 12:42:15,False +39,req_912,user_459,Face reveal stand force condition environmental office generation until million.,2025-10-13 11:04:18,2025-11-14 21:27:56,True +40,req_72,user_27,Develop image relate play represent my action environment Mr.,2025-11-21 04:07:17,2026-03-03 14:16:05,True +41,req_768,user_315,Attack speech little according again them use half bank then list bed sister but take.,2025-07-04 21:21:54,2025-11-02 04:26:29,False +42,req_851,user_51,Grow ready hand ahead reason huge report send will particular every century level carry measure.,2025-09-10 15:25:16,2026-04-23 14:21:06,True +43,req_442,user_80,Gas bring consumer have son deal score.,2026-02-17 15:45:16,2026-03-12 17:07:29,False +44,req_167,user_482,Own cup popular raise win hand work later himself.,2025-07-08 00:13:02,2025-12-29 22:47:53,False +45,req_20,user_284,Life life eye might successful wind think degree matter.,2025-09-29 02:15:49,2026-01-21 09:47:23,False +46,req_364,user_76,Community blue skin spend parent magazine activity management civil.,2025-08-29 08:26:47,2026-03-21 09:56:04,False +47,req_644,user_311,These no imagine onto ability Congress prevent police prevent decide parent college fear.,2026-05-03 22:51:28,2026-05-04 03:36:30,True +48,req_640,user_191,Everybody paper almost former over beautiful against.,2025-08-20 22:45:45,2025-11-10 06:33:02,True +49,req_100,user_137,Value change east skill threat forward tough.,2025-07-01 20:09:23,2026-02-13 21:29:43,False +50,req_184,user_6,Show you manage word window class social assume end him few and administration wide race.,2025-05-31 16:53:29,2026-02-28 20:48:16,True +51,req_174,user_422,Quite research worry forget begin beat group show necessary customer give Republican weight among.,2026-03-23 14:59:12,2026-04-08 13:17:57,False +52,req_123,user_82,Police fill seem local around seven after pressure leg clearly oil management.,2025-11-16 10:49:53,2026-01-25 19:59:59,False +53,req_527,user_63,Agreement prepare hand picture bed learn most.,2025-07-23 04:18:19,2025-08-27 11:01:18,True +54,req_630,user_194,Mind allow rise education available product hit watch perform throughout idea analysis performance some continue.,2025-12-17 01:50:18,2026-04-29 09:42:38,False +55,req_549,user_478,Wonder put various fall plan policy several when popular PM.,2026-03-22 10:39:42,2026-04-21 02:42:37,True +56,req_633,user_125,Doctor catch evidence follow according statement teach age bag the civil age democratic begin those hundred.,2025-08-26 10:57:06,2025-12-13 00:15:34,True +57,req_788,user_51,Almost less head dog chair blood light yet behind indicate challenge.,2025-10-08 13:10:03,2026-03-20 10:27:06,True +58,req_247,user_173,Music least left television interview go heavy most last image issue name how kid.,2025-07-23 00:17:31,2026-04-07 19:42:16,False +59,req_547,user_237,Civil may crime compare often certain policy bring response.,2026-04-02 03:15:46,2026-04-12 16:15:53,True +60,req_472,user_93,Everybody yourself task effect point newspaper process foot little attention.,2026-04-26 20:02:45,2026-05-02 07:42:11,True +61,req_371,user_66,Well shoulder stay deal responsibility one have effect speak stand claim character.,2026-01-13 16:54:52,2026-03-07 13:55:22,False +62,req_858,user_88,Month yes attorney perhaps defense order apply stop work experience she drug south out interest more.,2025-07-31 23:40:06,2025-09-08 08:28:03,True +63,req_897,user_272,Politics fill partner last seek person star central a candidate another lead reach possible.,2025-05-07 21:03:29,2026-01-16 00:11:49,False +64,req_800,user_79,At most ago deal other expect phone sure program each.,2026-01-28 00:31:43,2026-04-18 03:32:46,False +65,req_346,user_480,See teacher throw role somebody rest participant five trip consider president according in cell minute.,2025-06-28 04:48:33,2025-07-13 17:29:38,True +66,req_529,user_231,Political dinner suddenly drop present government force figure stuff kitchen modern skin.,2026-01-22 19:24:58,2026-02-26 10:04:29,False +67,req_780,user_441,Blood father training analysis sound professional building radio summer sometimes expect for.,2025-09-06 07:26:50,2026-04-29 12:38:14,False +68,req_748,user_291,Send administration find research eight what scene set choose today article side day.,2025-06-27 17:48:56,2025-10-28 02:41:29,True +69,req_152,user_460,Subject hope myself condition citizen final yard.,2026-01-04 03:51:49,2026-02-02 22:24:09,True +70,req_716,user_134,Above between oil election own answer level discuss budget.,2026-04-20 05:35:50,2026-04-20 08:45:49,False +71,req_399,user_183,Talk within security property hard back training than training energy half always one anything strong.,2025-08-23 02:47:17,2025-11-20 03:17:16,False +72,req_715,user_223,Read various there home seem three Mrs she million heart.,2025-11-15 02:35:18,2025-12-12 10:22:01,False +73,req_166,user_412,Political while recognize suggest television itself tend her protect ground doctor another front thus.,2025-09-08 00:44:18,2026-04-25 07:02:20,True +74,req_801,user_386,Test go member white authority within suffer sort half young.,2025-09-16 16:27:59,2025-11-19 05:06:23,False +75,req_934,user_225,Training require peace letter strategy agency man say of.,2026-04-05 09:01:30,2026-05-04 13:18:27,False +76,req_819,user_22,Thus order believe section degree budget already question author dog that quite book will.,2026-03-16 22:21:52,2026-03-20 06:45:30,True +77,req_278,user_417,Start how various minute computer represent move.,2026-02-04 16:39:17,2026-02-06 18:00:41,True +78,req_752,user_288,Teacher product wrong coach house work upon trip meet thing international of.,2025-08-02 19:56:53,2025-12-22 15:03:47,False +79,req_214,user_327,Place prove space wear agree star visit wear heart PM author job.,2026-03-13 08:27:56,2026-03-28 15:43:02,False +80,req_557,user_35,Run as describe stuff one development however professional cell.,2026-01-30 22:58:33,2026-03-15 18:34:48,False +81,req_160,user_324,Its matter step during sport in likely finally financial town project meet town pretty.,2026-01-25 20:44:04,2026-02-14 05:24:00,False +82,req_5,user_81,Series major front card fire listen majority figure several seat.,2025-05-18 19:48:37,2026-01-04 03:02:54,False +83,req_923,user_232,Continue remain perform herself enough scene summer single dog.,2025-10-23 23:32:40,2025-12-09 19:21:10,True +84,req_859,user_350,Free story everybody check throw treat kind machine opportunity network reach.,2025-11-18 01:22:20,2026-04-06 17:18:28,True +85,req_627,user_490,Through source fund table run move health front board serve performance heart challenge point under need.,2025-09-14 12:43:55,2026-03-12 04:03:04,True +86,req_436,user_289,Indeed traditional local skin management good marriage particular police edge better any arrive local.,2025-11-19 06:07:07,2026-05-01 15:17:23,True +87,req_579,user_260,Mr nation realize necessary light fact maybe present every no rise teach respond.,2026-01-12 12:26:05,2026-01-15 15:01:53,True +88,req_392,user_220,Shake good analysis concern ground center respond start late gas around point modern mean their.,2025-08-08 01:52:27,2026-02-26 23:10:45,False +89,req_192,user_152,Try age prepare serious heart of star although effect buy.,2026-04-11 06:32:33,2026-04-29 13:15:46,True +90,req_20,user_28,Write western sometimes attorney free best baby TV realize movement special form generation.,2026-03-07 08:35:00,2026-05-03 14:08:56,True +91,req_457,user_6,Administration down institution area reach by reality me trouble.,2025-07-24 18:52:27,2025-08-18 22:48:59,True +92,req_34,user_63,Woman movie student together past show season concern executive attack late itself partner require follow democratic.,2026-01-10 01:53:23,2026-02-07 07:43:38,True +93,req_359,user_117,Would them own south change work throughout police situation have.,2025-07-10 02:35:38,2025-07-19 14:41:37,True +94,req_63,user_415,Enter son listen security yourself race since team author.,2026-02-26 21:26:00,2026-04-12 19:12:58,True +95,req_559,user_446,Sure score turn particular example himself region at environment I idea provide hot area.,2025-09-29 17:08:47,2026-05-01 19:02:18,True +96,req_566,user_76,Military social dog way evening than some though his party.,2026-02-18 10:06:29,2026-02-26 05:25:58,True +97,req_918,user_19,Family son wonder rich heart above finally use table no mother north project doctor dream.,2025-11-10 01:45:00,2026-03-14 12:12:02,True +98,req_714,user_75,Wind less figure because morning pattern off push lose only middle instead skill.,2025-11-13 05:17:22,2026-03-01 05:51:34,False +99,req_194,user_383,Because second matter century participant charge social tough spring generation through early public way rule any.,2025-11-14 18:21:59,2025-11-23 00:43:26,False +100,req_224,user_52,Where reality according consider budget help phone special walk reason player particular fly cold box.,2025-10-05 22:07:26,2026-01-07 20:40:58,True diff --git a/database/mock_db/users.csv b/database/mock_db/users.csv new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/database/mock_db/users.csv @@ -0,0 +1 @@ + diff --git a/database/mock_db/volunteer_rating.csv b/database/mock_db/volunteer_rating.csv new file mode 100644 index 0000000..fd080ef --- /dev/null +++ b/database/mock_db/volunteer_rating.csv @@ -0,0 +1,101 @@ +volunteer_rating_id,user_id,request_id,rating,feedback,last_update_date +1,user_352,req_33,1,Next day far program south popular technology feel road tough peace.,2025-10-30 23:51:58 +2,user_396,req_943,4,Gun put radio we crime safe south notice might.,2026-03-26 02:32:15 +3,user_56,req_769,1,Want it physical myself door by history hear heavy try recent group human.,2026-05-01 21:41:25 +4,user_317,req_837,2,General red evidence adult produce single follow page sing hundred race.,2025-07-21 08:19:42 +5,user_454,req_149,5,Man sign war help PM sell expert of service PM sport animal ready.,2025-07-17 14:20:53 +6,user_335,req_734,4,Election person perform show strategy piece scientist.,2026-02-13 16:23:57 +7,user_282,req_48,4,Policy keep available mouth respond bill start.,2026-02-21 02:57:00 +8,user_336,req_385,5,Author out when nation usually accept stage article.,2025-08-25 02:23:24 +9,user_412,req_953,1,Yeah too deep major pressure long performance clearly deep successful.,2025-05-11 15:10:41 +10,user_153,req_471,1,Beautiful white responsibility run better offer mouth continue image performance focus hard almost.,2025-05-07 03:43:23 +11,user_415,req_894,1,Area always something executive social seem rich whole business agree.,2025-12-11 04:42:50 +12,user_310,req_860,4,Exactly well bar exist travel experience father degree yet office cultural college financial.,2025-10-22 13:50:29 +13,user_104,req_246,4,Political sister suffer pattern wind include above.,2025-11-19 18:57:13 +14,user_180,req_354,2,Bag save newspaper minute ahead morning operation sea share.,2025-09-25 05:29:56 +15,user_8,req_999,4,Step reflect fly middle effort court over turn.,2026-01-10 06:45:15 +16,user_37,req_533,4,Stop along resource second our week reflect within remain.,2026-04-06 23:53:01 +17,user_393,req_100,1,War fall area scientist throughout quality view.,2026-02-22 02:57:36 +18,user_196,req_597,3,Skill that change issue fall grow nor executive left indicate laugh plan opportunity.,2025-06-24 21:52:37 +19,user_70,req_916,5,Involve inside rather west together fact nature employee effect art ago way peace.,2025-07-09 03:05:57 +20,user_27,req_765,2,Participant election would their specific sure leave newspaper small TV.,2026-01-06 12:40:07 +21,user_114,req_645,3,Well across listen win early we friend list.,2026-04-04 19:54:44 +22,user_29,req_220,1,Call sport brother director for push bank.,2025-09-06 21:26:47 +23,user_119,req_124,1,Natural work condition sit radio provide across build make.,2025-05-23 02:13:29 +24,user_250,req_53,5,Word history bag help nearly body.,2026-03-30 12:58:55 +25,user_80,req_928,2,State approach country American drug too seat ok hear later marriage.,2026-03-12 12:15:27 +26,user_354,req_317,1,Use foot fish room adult old wish.,2025-07-25 04:49:12 +27,user_274,req_821,1,Final order not buy occur agreement early help its energy.,2025-07-17 23:23:30 +28,user_418,req_565,1,Source true determine nearly organization model.,2026-03-17 01:47:40 +29,user_335,req_904,3,Will crime choose determine she fly.,2026-01-20 22:21:44 +30,user_429,req_212,4,Garden high should about media health admit.,2025-11-25 11:49:04 +31,user_90,req_896,2,Country rather yourself benefit scene tree street how act central.,2026-03-20 22:46:52 +32,user_425,req_61,2,Story color over be pattern book report over care Mr.,2026-03-21 11:33:55 +33,user_392,req_868,3,Look road story above price ever catch.,2025-12-27 00:46:25 +34,user_159,req_737,1,Because not light this ball week none phone Mr keep property.,2026-04-14 01:17:39 +35,user_94,req_10,1,Yard score serve will go black strategy series along firm professional Mr.,2026-04-06 20:14:21 +36,user_364,req_637,4,Final quickly question skin scene music but.,2025-11-07 12:55:47 +37,user_60,req_910,3,Wear cost until program single nation no author.,2026-03-12 05:14:06 +38,user_493,req_737,2,Choose thus partner federal type policy.,2025-07-12 17:30:37 +39,user_385,req_99,4,Care wish pull state officer painting staff up lay also run hundred call.,2025-11-21 20:38:08 +40,user_436,req_132,1,Toward five ahead manager movie prove cultural door news fine chair outside fire.,2025-10-14 05:47:59 +41,user_374,req_371,3,Coach magazine unit couple strategy bring lot process political talk now magazine western.,2025-10-15 19:41:36 +42,user_194,req_599,2,Film various civil church Republican according clearly product brother.,2025-09-27 17:20:52 +43,user_256,req_115,3,Seek standard water some box usually.,2025-07-18 22:04:51 +44,user_14,req_36,5,Bit down read note attention worry machine protect collection heart system ago them.,2025-05-07 06:57:35 +45,user_234,req_878,3,Daughter white response purpose ask food.,2025-05-16 13:59:25 +46,user_378,req_410,2,Daughter on everything leave special attack.,2025-09-28 07:34:48 +47,user_160,req_468,3,Their yet else foot suffer education.,2025-07-20 10:37:17 +48,user_159,req_284,4,Herself car name describe apply later.,2026-04-24 14:37:36 +49,user_444,req_608,5,Really someone occur add just spring four good work participant involve almost medical.,2025-05-19 10:26:00 +50,user_316,req_602,1,Popular type reach control business popular evidence draw long.,2025-09-21 13:22:12 +51,user_170,req_435,5,Loss couple although necessary audience deal that Republican site collection floor conference.,2025-11-13 05:27:52 +52,user_322,req_609,5,Writer manage clearly focus without however position.,2025-08-29 13:20:39 +53,user_498,req_981,2,Admit maybe particular customer popular view pretty strategy bed more story more.,2025-11-25 00:32:04 +54,user_468,req_384,3,Choice big seven have crime hot old.,2025-05-16 07:59:26 +55,user_199,req_149,1,Already second book small note watch protect capital man.,2026-01-10 12:14:09 +56,user_351,req_94,1,Act network onto prevent although between.,2026-01-03 04:07:26 +57,user_25,req_516,2,Nature picture claim involve window wrong number beautiful argue garden wife remain part.,2026-02-03 10:12:41 +58,user_23,req_167,1,Senior gun great truth wear candidate course chance give personal sign involve.,2025-11-08 15:22:24 +59,user_420,req_839,1,Heavy second amount receive garden something across ten above Mr three best.,2026-03-01 05:14:24 +60,user_48,req_867,3,Quality require lead official operation remember human attack money body nation fire.,2025-05-29 10:23:48 +61,user_492,req_545,2,Provide cause individual total become discussion condition many war.,2025-11-26 00:36:32 +62,user_405,req_718,3,Response rate describe visit business bit ago film development attention thought item first.,2026-04-30 17:34:01 +63,user_433,req_610,4,Present husband treatment tell green worry approach need religious rise easy.,2026-03-16 07:30:03 +64,user_313,req_44,4,Today system lot final walk purpose economic seat service.,2025-06-11 21:45:47 +65,user_7,req_489,3,Enjoy according happen right most event evidence garden.,2026-03-17 09:18:53 +66,user_253,req_204,4,Step plan executive million American from truth.,2025-10-06 20:37:45 +67,user_479,req_110,3,Forward including garden bit same song product exist public main draw feeling.,2025-09-30 05:41:53 +68,user_266,req_991,3,She agree major system camera national occur good set conference ask.,2026-01-25 01:40:27 +69,user_432,req_530,4,Shake grow race each order least hair today force finish.,2026-02-24 06:58:40 +70,user_6,req_152,4,Suffer either make be audience before agent foot.,2025-07-03 00:26:01 +71,user_243,req_752,5,Tonight business stand strategy lead measure some impact far relationship.,2026-02-28 16:38:16 +72,user_245,req_68,5,Mrs care project fight change game site.,2026-01-08 23:07:24 +73,user_28,req_824,1,Whatever success say report rich best pretty kitchen.,2025-09-12 19:59:56 +74,user_50,req_623,1,Have group teach gas life deal able and also.,2025-05-21 04:36:54 +75,user_62,req_932,4,Coach piece above professional sell throughout listen be still guy fire real.,2025-09-26 15:35:40 +76,user_132,req_61,2,Involve allow inside movie form environment senior total charge ok.,2026-04-19 17:20:49 +77,user_118,req_618,5,Meet training some city our answer pay defense.,2025-12-21 19:15:51 +78,user_388,req_848,3,Movement raise thing walk item better wear dark environmental fill.,2026-04-26 16:09:16 +79,user_252,req_16,2,Purpose bar debate require man school top speak social oil all suddenly reach.,2025-05-28 15:46:37 +80,user_373,req_782,2,Store stuff move produce address degree case development image.,2025-07-15 02:07:44 +81,user_370,req_621,1,Indeed billion yard idea different training beat power imagine night act later computer.,2025-08-05 00:39:31 +82,user_261,req_85,2,Always respond able event war risk save thus upon only over their family.,2026-02-12 23:51:07 +83,user_54,req_580,1,Agency establish perhaps study economic total suddenly force behavior education.,2025-11-23 09:19:01 +84,user_302,req_854,1,Want floor involve hour financial up check movie through.,2025-11-20 14:16:01 +85,user_268,req_184,3,Quickly policy perform big Mr action seven team why back.,2026-02-20 19:06:23 +86,user_222,req_986,4,Agency put president building least bring each certainly cut time blood.,2025-08-07 19:52:19 +87,user_108,req_830,3,Those you local medical whole according away window true final.,2026-02-24 22:17:24 +88,user_72,req_662,3,Do during film paper spring member cell understand wide analysis.,2026-01-28 08:00:57 +89,user_249,req_525,3,Home series international allow go month because.,2025-09-10 16:29:42 +90,user_86,req_772,2,Ten figure stand friend rock TV hard carry positive fire game magazine.,2026-02-20 06:52:22 +91,user_197,req_527,2,Whether author your whose real store brother.,2025-08-17 01:42:11 +92,user_283,req_969,4,Make analysis notice region account member sometimes spend early measure which call let.,2026-04-17 10:22:32 +93,user_467,req_991,1,Series test open impact such respond than or.,2026-02-07 01:07:45 +94,user_259,req_45,1,Data area door international car concern leader.,2025-12-26 16:52:11 +95,user_63,req_426,1,Memory throw old TV serve company end development daughter.,2025-08-09 04:07:03 +96,user_473,req_389,3,Six society statement crime myself idea claim hair must case hit.,2025-06-30 00:11:21 +97,user_411,req_25,5,Difference something born participant away exactly however off rate language cause stock on.,2025-09-15 11:43:49 +98,user_90,req_778,5,Miss safe south now for officer international bill personal should four.,2026-02-09 05:53:28 +99,user_268,req_345,4,Treatment PM really dark student blue us responsibility growth across audience.,2025-10-09 06:40:51 +100,user_172,req_604,2,Measure child energy worker chance address seek wish step policy.,2026-04-02 03:41:26