ETH Price: $3,352.43 (-1.08%)
Gas: 5.1 Gwei

Token

Rekt cans (RKC)
 

Overview

Max Total Supply

0 RKC

Holders

3,876

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
96971.eth
Balance
1 RKC
0xf852544fea875c0bb766c029387395dfbd4a90cc
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
FOR

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-26
*/

// SPDX-License-Identifier: UNLICENSED
/*  ______    ___    ______    ______   _____          ____     ______           ____     ______    __ __  ______
   / ____/   /   |  / ____/   / ____/  / ___/         / __ \   / ____/          / __ \   / ____/   / //_/ /_  __/
  / /_      / /| | / /       / __/     \__ \         / / / /  / /_             / /_/ /  / __/     / ,<     / /
 / __/     / ___ |/ /___    / /___    ___/ /        / /_/ /  / __/            / _, _/  / /___    / /| |   / /
/_/       /_/  |_|\____/   /_____/   /____/         \____/  /_/              /_/ |_|  /_____/   /_/ |_|  /_/
                                                                                                                 */
/*ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@@@@@@%%(%%@@@@@%%%@((%@@@@@@@@ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@@@@@%#(/////((((%%@@@(((///%%@&%(((@@@@@ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@@@@@%%///%(((%&%%&%%%(((((%%@@@@%%((((%&&&&((/&&%#(@@@ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@@(((///(((%%&&&&&%(((((((((((((@@@@(((%%&&%((/&&/%%&&&&&%((@ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@&&&%%((///(&&%(((#%(((///((%@@@@@@@@%%(((/#&&&%&&%//(&&((&((%@@ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@@@%(((%%&&&&&&%%&&&&&%///((%&&&#(((((((@@%//(((&&/((&(((((&&%&&/((@ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@@@%%&((%&&%%&%%((((((%&&%%(%%&&&&&&&&%((%@@@((%&&&&%&&&(((((&&&((&((@@@ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@@,,.//@((%&&&&&%%(///((%((%&&&&((((///((&&((((((%@@(((((&%%(//%(/((&%%(((@@@/º.@@ººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº../((((((%%&&%&&&&&&&&&&%(((%%&%%(((%%&%%///%@@@&%((%&&&&&&&&&&%((/@@@,,/#@ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº#@..,@@@@@&&&%%(((%&&&%%((((((%%&&&%#(((%&&&&&&@@@@&&&&&&&%%%%%%%&&&@@@/..@%ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº#@,,............//.../,,......................,,,/º,....................,,@%ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº#@..............,,///.....................................................@%ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº#@........................................................................@%ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº#@........................................................................@%ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº#@........................................................................@%ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº#@..........................................,,............................,(@ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº#@......,,.....,..,.........................,,............................./@ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº#@......,,.....,..,.........................,,.,,.......................//./@ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº#@.....,,,.....,......................@@@...,,,,,.....@@@...............///#@ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº#@.....,.......,...................@@@@@@.....,,,...,,@@@@@@............@@@%ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº#@.....,......./...............................//...//..................@@ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº#@.....,.....//,........@#,......,,@,..........,,///,,....@@,.......,@@.@@ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº#@....................@@@#,......,,@@@@@.................@@@,.......,@@@@@ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@@,,,...,,@................@,,,,.........,&@@@...............@@,,,.........,,@@@ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@,,.........,,...............@@@@@@@@@@@@@@@@......,,...........@@@@@@@@@@@@@@@@@ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@...////////...................@#º((ººº(@@///......,,.,,...,,....@@(#####((@///@@ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@...//,º///,...................@%(ººº((%@@///......,,///...,,....@@%####%%%@///@@ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@...///º,,,....................@%((((%%#@@///.........,,///,,....@@./(((///@///,,@%ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@...,,,º/,,/...................@%///(ºº(@@///....................@@(((..(%%@///..@%ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@.....,,,,,,...................@%(%%%((º@@///....................@@/////(ºº@///..,(@ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@...@@.....,......,,..,......@@%%%@@...@(((//................,...@@%(///(((@///.../@ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@...@@.....,......,,../.....@%%%&@ººº@@((((@@.....,..........,...@@/%%%%@(((@@@.../@ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@,,,@@.....@,,....//........@%%#(º...ººººº@,......@,,......,,@..@@@.&@///((///@..,(@ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@@@@(...@..,...//........@%%#(º...ººººº@,.......,,@@@@@@@@,......&@///@@///@..@%ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@@ @@ (@,,@...,,/..........@%%#&@...ººººº@,..........,,,,,.........&@///@@///@..@%ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@  #&@,,.................@%%#&@...@@@@@............................@@@@@///@..@%ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@###&@,,..................@@%&@...@@.........../@@@@@@@@@@/...........@@///@..@%ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@@((((((%%@../.................(@ººº@@.........@@@@@@@@@@@@@@@@.........@@(((@..@%ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@%%(%%(%@((@../.................................@@@@@@@@@@@@@@@@............,,@..@%ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@%%(%%(%@@@...@,,............................,,.@@@@@@@@@@@@@@@@............//@..@%ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@@@@@@#ººº@@@º@@/...........................,,.%%@@@%%%@@@@@@@@.........,,@@@,,,@%ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@(/.........................,,.###%%@%%##%@@@@@........,@@º@@,,,@%ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@@@......................../...,,,,,,,,,,......,//@@ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@...,,@...,,@@@,,,,,,,,,,,@@@@@@@@@@@@@@@@ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@...,,@...,,@@@,,,,,,,,,,,,,@,,...@%,...@@ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@,,.,,@@@@#º@@@,,,,,,,,,,,@@@@@@@@,(@ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@,,,,,@ººº#@((@@@@@@@@@@@@   @@,,,@@@ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@@@(º,              ,, ((      ,,@ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@@@@@@@@@(((,,                    ,, ((         ,,(@@@/ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº@@@@@@@@@@@@((,                              ,, ((         ,,@@@(@@@@ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººººººººººººººº/@@@(,,,           ,,(                              ,, ((              ,,,,,(@@@ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººººººº@@@@(,,                                                ,, ((               .,,,,((@@@@@@@@@@@ººººººººººººººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººººººººººº@@@@@@(/                            ,,,(@@@%(,,            ,, ((              ,/(@@@((,          ,((@ººººººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººººº@@(,,    ,,(/                               ,,,,,,((@@@(,,         ((        ,(((,,                      ,((@/ººººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººº#@((           ,                                 ,,,,,,((@@@@#(,, ,, ((                                     ,,(&@ºººººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººº#@                            ((,                                    ((                              ,,,(((@@@@@@@@ºººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººº#@                            ,,@((                               ,, ((                 ,,,(((@@@@@@@@@@@@@&%%%#(@@ºººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººº#@,,                            ,@@(        ,,(((@@@@@@@@@@@@@@,,    ((@@@@@@@@@@@&%%%#((((((((((((((((((((((((((&&@ººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººº@%(@@(,,                          ,,@.    ,,@%%%%%%#((((((((((((((@%%((((((((((((((((((((((((((((((((((((((((@@%#(%%@ººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººº@%(((@((,                        @@@@@@@@@@@@%%%%%@@@@@@@@@@@@%%ºº(@@&((((((((((((((((((((((((((((@@%#((((((((((((%%@ººººººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººº@%(,,,,,@@@@@@(((@@@&&%((((((((((((((((((((((((%&&@@&%%(((((((#%@@ººº@&&(((@&%%%((((((((((((((((((((((((((((((((((((@ººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººº#@@@@@@&%%(@@(((@@&%%(((((((((((((((((((((((%%&%%(((((((((&&@@@@@(ºº(@@((((((((((((((((((((((((((((((((((((////////@ººººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººº#@&&%((((((((%#(%%@%%((((((((((((((@%%(((((&%%(((((((((((((((#%%%@ººº@@((((((((((((//////////////(((#%%%&&&@@@@@@@@@@@ººººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººº#@&&%(((@@%((%#(((@%%((((((((((((((((((#&%%(((((((((((/(((%%&&&&&&ººº@@&&&@@@@@@@@@@@@@@@@(@@((((((,,,             ,@@@ºººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººº#@&&%((((((((%#(((@%%(((((((((////////&&@(((((((((((//(%%&&&@@@@@(ºº(@@@@@@#,,,           (@@                       ((@ºººººººººººººººººººººººººººººººººººººººººº
ººººººººººººººººººººººººººººººººººººººº#@&&%(((((((((#@((&@@&%%&@@@@@@@@@@@@@@@///////////(%%&@@%((((((((@@(,,           ,,,(((@@@@@                         @ºººººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººº@@&&&&%%%&&@@@@@@%%%@@@@@@%(((,((@((,,,@@(////////(#%&&@@@@@@@@@@@@((,                     ,((@,,                      (@@ºººººººººººººººººººººººººººººººººººººººº
ºººººººººººººººººººººººººººººººººººººº@%(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,@@,,,((@&&&&&&&&@@@(((,,                                       ,                     ,@@ºººººººººººººººººººººººººººººººººººººººº
*/
/*
   _____    ____    _____  ____ _   __  __         _____  ____ _   ____  ____
  / ___/   / __ \  / ___/ / __ `/  / / / /        / ___/ / __ `/  / __ \/_  /
 (__  )   / /_/ / / /    / /_/ /  / /_/ /        / /__  / /_/ /  / / / / / /_
/____/   / .___/ /_/     \__,_/   \__, /         \___/  \__,_/  /_/ /_/ /___/
        /_/                      /____/                                      */

//THE GREAT REKT LAUNCH EVENT WILL NOT BE FORGOTTEN -pixelrogueart

pragma solidity ^0.8.0;


library MerkleProof {

    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }
    function verifyCalldata(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }
    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {

        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;

        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {

        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;


        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;

        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {

        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

pragma solidity ^0.8.0;
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    function toString(uint256 value) internal pure returns (string memory) {

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}


pragma solidity ^0.8.0;

library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }

    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }

    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
        uint8 v = uint8((uint256(vs) >> 255) + 27);
        return tryRecover(hash, v, r, s);
    }

    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    function recover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }

    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {

        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s));
    }

    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}

pragma solidity ^0.8.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

pragma solidity ^0.8.0;

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity ^0.8.1;

library Address {

    function isContract(address account) internal view returns (bool) {

        return account.code.length > 0;
    }


    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

pragma solidity ^0.8.0;

interface IERC721Receiver {

    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}


pragma solidity ^0.8.0;

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

pragma solidity ^0.8.0;

abstract contract ERC165 is IERC165 {

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}



pragma solidity ^0.8.0;

interface IERC721 is IERC165 {

    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    function setApprovalForAll(address operator, bool _approved) external;

    function getApproved(uint256 tokenId) external view returns (address operator);

    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

pragma solidity ^0.8.0;

interface IERC721Metadata is IERC721 {

    function name() external view returns (string memory);


    function symbol() external view returns (string memory);


    function tokenURI(uint256 tokenId) external view returns (string memory);
}

pragma solidity ^0.8.0;









contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    string private _name;

    string private _symbol;

    mapping(uint256 => address) private _owners;

    mapping(address => uint256) private _balances;

    mapping(uint256 => address) private _tokenApprovals;

    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }


    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
        interfaceId == type(IERC721).interfaceId ||
        interfaceId == type(IERC721Metadata).interfaceId ||
        super.supportsInterface(interfaceId);
    }


    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }


    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }


    function name() public view virtual override returns (string memory) {
        return _name;
    }


    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }


    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }


    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }


    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }


    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }


    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }


    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }


    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {

        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }


    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }


    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }


    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }


    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }


    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }

    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }


    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }


    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId);
    }


    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);

        _afterTokenTransfer(owner, address(0), tokenId);
    }


    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }


    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }


    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }


    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

pragma solidity ^0.8.0;

abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;


    mapping(uint256 => string) private _tokenURIs;


    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();


        if (bytes(base).length == 0) {
            return _tokenURI;
        }

        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }


    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}
pragma solidity ^0.8.0;





pragma solidity ^0.8.14;



contract FOR is ERC721URIStorage, Ownable {

    bool whitelist_mint = true;

    using ECDSA for bytes32;

    string private _baseURIextended = "ipfs://QmTTvdZZpMFvSCHnAo3FqFY5CccirYRrFC3GZ6drXhP4Bn/"; // This one is used on OpenSea to define the metadata IPFS address

    bool private mint_paused = false; // in case someone tries to rekt our mint we can pause at will

    mapping(uint8 => bytes32) private whiteListMapping;

    mapping(uint8 => uint16) public cansLeft; // our supply

    mapping(address => uint8) private alreadyOwnCan;  // used to set limits (no more than 2 cans, one of each)

    mapping(address => string) public cansHeOwn; // your supply

    mapping(uint8 => uint16) private canCountId;

    address[] private unknownWhitelist;

    constructor() ERC721("Rekt cans", "RKC") {

        cansLeft[0] = 1111;  // B0WB
        cansLeft[1] = 1111;  // B0LT
        cansLeft[2] = 1111;  // F1R3
        cansLeft[3] = 1111;  // SCH00L
        cansLeft[4] = 1111;  // SN3K
        cansLeft[5] = 250;   // WabiSabi
        cansLeft[6] = 100;   // Deladeso
        cansLeft[7] = 250;   // Creepz
        cansLeft[8] = 250;   // Grillz Gang
        cansLeft[9] = 250;   // Mooncan
        cansLeft[10] = 50;   // Tiny Zoo
        cansLeft[11] = 150;  // Llamaverse
        cansLeft[12] = 50;   // ??


        whiteListMapping[0] = 0xa7b77bb86f03345c356b799d46aaf11289145d178881cf95e3ad5e4faf03934c;
        whiteListMapping[1] = 0xa7b77bb86f03345c356b799d46aaf11289145d178881cf95e3ad5e4faf03934c;
        whiteListMapping[2] = 0xa7b77bb86f03345c356b799d46aaf11289145d178881cf95e3ad5e4faf03934c;
        whiteListMapping[3] = 0xa7b77bb86f03345c356b799d46aaf11289145d178881cf95e3ad5e4faf03934c;
        whiteListMapping[4] = 0xa7b77bb86f03345c356b799d46aaf11289145d178881cf95e3ad5e4faf03934c;
        whiteListMapping[5] = 0x0fb49340ec9e083562809c17e635d16b1fd00d7d2fa3d02090b63c1f39fc7ca1;  // WabiSabi
        whiteListMapping[6] = 0x2d764d45115ce0415195b4296380ba7a8fb5fecb589f52d2d55ed49383bfd781;  // Deladeso
        whiteListMapping[7] = 0x01886e59a4db5e0801f9a2243ad9ac01ddbb814b46b70a89f708562506a729a2;  // Creepz
        whiteListMapping[8] = 0x4c156357cefbea51166ae7f0253d32c3d14d5849fbf75a297b2caa1fe86ad68e;  // Grillz Gang
        whiteListMapping[9] = 0xab2a6e961b690b8f4f4f4dc733818bd4bef8586a7b976e5042bf334f59a5e285;  // Mooncan
        whiteListMapping[10] = 0xf61184b70addc57bb4e61134c0c8e15f0da4960b947d636799150eb3339f2860; // Tiny Zoo
        whiteListMapping[11] = 0x3af526e2f746fba2e576ed127edbb6d14c39dc13482d928114e7d4015660c03a; // Llamaverse
        whiteListMapping[12] = 0x4f0a4dfc85667e30c6f8ad3c1698ece1314a4c26d2b1d1691cafe0c4de21dc2b; // ??

        // TODO TOMOROW
    }

    // Set the Metadata IPFS url (see docs.opensea.io)
    function setBaseURI(string memory baseURI_) external onlyOwner() {
        _baseURIextended = baseURI_;
    }

    // In case we need to pause the mint
    function switchMintState() external onlyOwner() {
        mint_paused = !mint_paused;
    }

    function switchWhitelistMintState() external onlyOwner() {
        whitelist_mint = !whitelist_mint;
    }

    // For OpenSEA
    function _baseURI() internal view virtual override returns (string memory) {
        return _baseURIextended;
    }

    function setWhitelistMerkleRoot(bytes32 newMerkleRoot_, uint8 _id) external onlyOwner {
        whiteListMapping[_id] = newMerkleRoot_;
    }


    function M_I_N_T(bytes32[] memory proof,uint256 amount, uint8 tokenID) public {

        if(tokenID > 4) {
            require(MerkleProof.verify(
                    proof,
                    whiteListMapping[tokenID],
                    keccak256(abi.encodePacked(msg.sender, amount))), "Not whitelisted, try again later if we don't sell-out");
        } else {
            if (whitelist_mint) {
                require(MerkleProof.verify(
                        proof,
                        whiteListMapping[tokenID],
                        keccak256(abi.encodePacked(msg.sender, amount))), "Not whitelisted, try again later if we don't sell-out");
            }
        }

        require(!mint_paused, ">MINT PAUSED< If you're getting this message, shit went down (again). >MINT PAUSED<");

        require(alreadyOwnCan[msg.sender] < 3, "One community can and one collab can per wallet!!!");

        if(tokenID > 4) {
            require(alreadyOwnCan[msg.sender] != 2, "One collab can per wallet");

        } else {
            require(alreadyOwnCan[msg.sender] != 1, "One community can per wallet");
        }
        
        // In case some of the random cans sell-out, you can still get a can without spending another transaction gas fee
        // but now instead of random its from 0 to 4
        if(cansLeft[tokenID] == 0 && tokenID < 4) {
            for(uint8 i = 0; i < 4; i++) {
                if(cansLeft[i] > 0) {
                    tokenID = i;
                    i = 4;
                }
            }
        }

        // sold out require, sorry for the gas mate
        require(cansLeft[tokenID] > 0, "Sold out bother, don't brother ;)");

        if(alreadyOwnCan[msg.sender] == 0) {
            tokenID <= 4 ? alreadyOwnCan[msg.sender] = 1 : alreadyOwnCan[msg.sender] = 2;
        } else {
            alreadyOwnCan[msg.sender] = 3;
        }

        cansLeft[tokenID] -= 1;

        cansHeOwn[msg.sender] = string.concat(cansHeOwn[msg.sender], Strings.toString(tokenID));

        uint16 _tokenID;

        // Rekt code sorry guys, no time to do math -lrovaris

        if (tokenID <= 5) {
            _tokenID = (tokenID * 1111) + canCountId[tokenID];
        } else if (tokenID == 6) {
            _tokenID = 5805 + canCountId[tokenID];
        } else if (tokenID == 7) {
            _tokenID = 5905 + canCountId[tokenID];
        } else if (tokenID == 8) {
            _tokenID = 6155 + canCountId[tokenID];
        } else if (tokenID == 9) {
            _tokenID = 6405 + canCountId[tokenID];
        } else if (tokenID == 10) {
            _tokenID = 6655 + canCountId[tokenID];
        } else if (tokenID == 11) {
            _tokenID = 6705 + canCountId[tokenID];
        } else if (tokenID == 12) {
            _tokenID = 6855 + canCountId[tokenID];
        }

        canCountId[tokenID] += 1;
        _safeMint(msg.sender, _tokenID);

    }

}

//drop an 'F' in the chat for all those who got rekt in the first mint
//Special thanks to all lab rats that helped us -FOR Team

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint8","name":"tokenID","type":"uint8"}],"name":"M_I_N_T","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"cansHeOwn","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"cansLeft","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newMerkleRoot_","type":"bytes32"},{"internalType":"uint8","name":"_id","type":"uint8"}],"name":"setWhitelistMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"switchMintState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchWhitelistMintState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600760146101000a81548160ff02191690831515021790555060405180606001604052806036815260200162005217603691396008908162000049919062000a40565b506000600960006101000a81548160ff0219169083151502179055503480156200007257600080fd5b506040518060400160405280600981526020017f52656b742063616e7300000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f524b4300000000000000000000000000000000000000000000000000000000008152508160009081620000f0919062000a40565b50806001908162000102919062000a40565b5050506200012562000119620006f860201b60201c565b6200070060201b60201c565b610457600b60008060ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550610457600b6000600160ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550610457600b6000600260ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550610457600b6000600360ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550610457600b6000600460ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555060fa600b6000600560ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055506064600b6000600660ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555060fa600b6000600760ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555060fa600b6000600860ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555060fa600b6000600960ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055506032600b6000600a60ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055506096600b6000600b60ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055506032600b6000600c60ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055507fa7b77bb86f03345c356b799d46aaf11289145d178881cf95e3ad5e4faf03934c60001b600a60008060ff168152602001908152602001600020819055507fa7b77bb86f03345c356b799d46aaf11289145d178881cf95e3ad5e4faf03934c60001b600a6000600160ff168152602001908152602001600020819055507fa7b77bb86f03345c356b799d46aaf11289145d178881cf95e3ad5e4faf03934c60001b600a6000600260ff168152602001908152602001600020819055507fa7b77bb86f03345c356b799d46aaf11289145d178881cf95e3ad5e4faf03934c60001b600a6000600360ff168152602001908152602001600020819055507fa7b77bb86f03345c356b799d46aaf11289145d178881cf95e3ad5e4faf03934c60001b600a6000600460ff168152602001908152602001600020819055507f0fb49340ec9e083562809c17e635d16b1fd00d7d2fa3d02090b63c1f39fc7ca160001b600a6000600560ff168152602001908152602001600020819055507f2d764d45115ce0415195b4296380ba7a8fb5fecb589f52d2d55ed49383bfd78160001b600a6000600660ff168152602001908152602001600020819055507f01886e59a4db5e0801f9a2243ad9ac01ddbb814b46b70a89f708562506a729a260001b600a6000600760ff168152602001908152602001600020819055507f4c156357cefbea51166ae7f0253d32c3d14d5849fbf75a297b2caa1fe86ad68e60001b600a6000600860ff168152602001908152602001600020819055507fab2a6e961b690b8f4f4f4dc733818bd4bef8586a7b976e5042bf334f59a5e28560001b600a6000600960ff168152602001908152602001600020819055507ff61184b70addc57bb4e61134c0c8e15f0da4960b947d636799150eb3339f286060001b600a6000600a60ff168152602001908152602001600020819055507f3af526e2f746fba2e576ed127edbb6d14c39dc13482d928114e7d4015660c03a60001b600a6000600b60ff168152602001908152602001600020819055507f4f0a4dfc85667e30c6f8ad3c1698ece1314a4c26d2b1d1691cafe0c4de21dc2b60001b600a6000600c60ff1681526020019081526020016000208190555062000b27565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200084857607f821691505b6020821081036200085e576200085d62000800565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008c87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000889565b620008d4868362000889565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620009216200091b6200091584620008ec565b620008f6565b620008ec565b9050919050565b6000819050919050565b6200093d8362000900565b620009556200094c8262000928565b84845462000896565b825550505050565b600090565b6200096c6200095d565b6200097981848462000932565b505050565b5b81811015620009a1576200099560008262000962565b6001810190506200097f565b5050565b601f821115620009f057620009ba8162000864565b620009c58462000879565b81016020851015620009d5578190505b620009ed620009e48562000879565b8301826200097e565b50505b505050565b600082821c905092915050565b600062000a1560001984600802620009f5565b1980831691505092915050565b600062000a30838362000a02565b9150826002028217905092915050565b62000a4b82620007c6565b67ffffffffffffffff81111562000a675762000a66620007d1565b5b62000a7382546200082f565b62000a80828285620009a5565b600060209050601f83116001811462000ab8576000841562000aa3578287015190505b62000aaf858262000a22565b86555062000b1f565b601f19841662000ac88662000864565b60005b8281101562000af25784890151825560018201915060208501945060208101905062000acb565b8683101562000b12578489015162000b0e601f89168262000a02565b8355505b6001600288020188555050505b505050505050565b6146e08062000b376000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c3578063c87b56dd1161007c578063c87b56dd1461034e578063dfb4b1641461037e578063e8feeb3a146103ae578063e985e9c5146103ca578063f2fde38b146103fa578063fc1fc5c3146104165761014d565b8063715018a6146102c6578063836070e6146102d05780638da5cb5b146102da57806395d89b41146102f8578063a22cb46514610316578063b88d4fde146103325761014d565b806336bf9e301161011557806336bf9e301461020857806342842e0e1461021257806355f804b31461022e578063607b95a91461024a5780636352211e1461026657806370a08231146102965761014d565b806301ffc9a71461015257806306fdde0314610182578063081812fc146101a0578063095ea7b3146101d057806323b872dd146101ec575b600080fd5b61016c600480360381019061016791906129cf565b610446565b6040516101799190612a17565b60405180910390f35b61018a610528565b6040516101979190612acb565b60405180910390f35b6101ba60048036038101906101b59190612b23565b6105ba565b6040516101c79190612b91565b60405180910390f35b6101ea60048036038101906101e59190612bd8565b61063f565b005b61020660048036038101906102019190612c18565b610756565b005b6102106107b6565b005b61022c60048036038101906102279190612c18565b61085e565b005b61024860048036038101906102439190612da0565b61087e565b005b610264600480360381019061025f9190612f20565b61090d565b005b610280600480360381019061027b9190612b23565b6112a5565b60405161028d9190612b91565b60405180910390f35b6102b060048036038101906102ab9190612f8f565b611356565b6040516102bd9190612fcb565b60405180910390f35b6102ce61140d565b005b6102d8611495565b005b6102e261153d565b6040516102ef9190612b91565b60405180910390f35b610300611567565b60405161030d9190612acb565b60405180910390f35b610330600480360381019061032b9190613012565b6115f9565b005b61034c600480360381019061034791906130f3565b61160f565b005b61036860048036038101906103639190612b23565b611671565b6040516103759190612acb565b60405180910390f35b61039860048036038101906103939190613176565b6117c2565b6040516103a591906131c0565b60405180910390f35b6103c860048036038101906103c391906131db565b6117e3565b005b6103e460048036038101906103df919061321b565b611881565b6040516103f19190612a17565b60405180910390f35b610414600480360381019061040f9190612f8f565b611915565b005b610430600480360381019061042b9190612f8f565b611a0c565b60405161043d9190612acb565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061051157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610521575061052082611aac565b5b9050919050565b6060600080546105379061328a565b80601f01602080910402602001604051908101604052809291908181526020018280546105639061328a565b80156105b05780601f10610585576101008083540402835291602001916105b0565b820191906000526020600020905b81548152906001019060200180831161059357829003601f168201915b5050505050905090565b60006105c582611b16565b610604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fb9061332d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061064a826112a5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b1906133bf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106d9611b82565b73ffffffffffffffffffffffffffffffffffffffff161480610708575061070781610702611b82565b611881565b5b610747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073e90613451565b60405180910390fd5b6107518383611b8a565b505050565b610767610761611b82565b82611c43565b6107a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079d906134e3565b60405180910390fd5b6107b1838383611d21565b505050565b6107be611b82565b73ffffffffffffffffffffffffffffffffffffffff166107dc61153d565b73ffffffffffffffffffffffffffffffffffffffff1614610832576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108299061354f565b60405180910390fd5b600960009054906101000a900460ff1615600960006101000a81548160ff021916908315150217905550565b6108798383836040518060200160405280600081525061160f565b505050565b610886611b82565b73ffffffffffffffffffffffffffffffffffffffff166108a461153d565b73ffffffffffffffffffffffffffffffffffffffff16146108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f19061354f565b60405180910390fd5b8060089081610909919061371b565b5050565b60048160ff1611156109a95761096583600a60008460ff1660ff16815260200190815260200160002054338560405160200161094a929190613856565b60405160208183030381529060405280519060200120611f87565b6109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b906138f4565b60405180910390fd5b610a4b565b600760149054906101000a900460ff1615610a4a57610a0a83600a60008460ff1660ff1681526020019081526020016000205433856040516020016109ef929190613856565b60405160208183030381529060405280519060200120611f87565b610a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a40906138f4565b60405180910390fd5b5b5b600960009054906101000a900460ff1615610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a92906139ac565b60405180910390fd5b6003600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1610610b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2490613a3e565b60405180910390fd5b60048160ff161115610bd0576002600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1603610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc290613aaa565b60405180910390fd5b610c63565b6001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1603610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5990613b16565b60405180910390fd5b5b6000600b60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff1661ffff16148015610ca1575060048160ff16105b15610d065760005b60048160ff161015610d04576000600b60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff1661ffff161115610cf157809150600490505b8080610cfc90613b65565b915050610ca9565b505b6000600b60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff1661ffff1611610d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6b90613c00565b60405180910390fd5b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1603610e935760048160ff161115610e34576002600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055610e8d565b6001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555b50610eed565b6003600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055505b6001600b60008360ff1660ff16815260200190815260200160002060008282829054906101000a900461ffff16610f249190613c20565b92506101000a81548161ffff021916908361ffff160217905550600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610f898260ff16611f9e565b604051602001610f9a929190613d13565b604051602081830303815290604052600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209081610ff4919061371b565b50600060058260ff161161104c57600e60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff166104578360ff1661103b9190613d37565b6110459190613d73565b9050611240565b60068260ff160361109357600e60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff166116ad61108c9190613d73565b905061123f565b60078260ff16036110da57600e60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff166117116110d39190613d73565b905061123e565b60088260ff160361112157600e60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff1661180b61111a9190613d73565b905061123d565b60098260ff160361116857600e60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff166119056111619190613d73565b905061123c565b600a8260ff16036111af57600e60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff166119ff6111a89190613d73565b905061123b565b600b8260ff16036111f657600e60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff16611a316111ef9190613d73565b905061123a565b600c8260ff160361123957600e60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff16611ac76112369190613d73565b90505b5b5b5b5b5b5b5b6001600e60008460ff1660ff16815260200190815260200160002060008282829054906101000a900461ffff166112779190613d73565b92506101000a81548161ffff021916908361ffff16021790555061129f338261ffff166120fe565b50505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361134d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134490613e1d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bd90613eaf565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611415611b82565b73ffffffffffffffffffffffffffffffffffffffff1661143361153d565b73ffffffffffffffffffffffffffffffffffffffff1614611489576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114809061354f565b60405180910390fd5b611493600061211c565b565b61149d611b82565b73ffffffffffffffffffffffffffffffffffffffff166114bb61153d565b73ffffffffffffffffffffffffffffffffffffffff1614611511576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115089061354f565b60405180910390fd5b600760149054906101000a900460ff1615600760146101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546115769061328a565b80601f01602080910402602001604051908101604052809291908181526020018280546115a29061328a565b80156115ef5780601f106115c4576101008083540402835291602001916115ef565b820191906000526020600020905b8154815290600101906020018083116115d257829003601f168201915b5050505050905090565b61160b611604611b82565b83836121e2565b5050565b61162061161a611b82565b83611c43565b61165f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611656906134e3565b60405180910390fd5b61166b8484848461234e565b50505050565b606061167c82611b16565b6116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b290613f41565b60405180910390fd5b60006006600084815260200190815260200160002080546116db9061328a565b80601f01602080910402602001604051908101604052809291908181526020018280546117079061328a565b80156117545780601f1061172957610100808354040283529160200191611754565b820191906000526020600020905b81548152906001019060200180831161173757829003601f168201915b5050505050905060006117656123aa565b9050600081510361177a5781925050506117bd565b6000825111156117af578082604051602001611797929190613f61565b604051602081830303815290604052925050506117bd565b6117b88461243c565b925050505b919050565b600b6020528060005260406000206000915054906101000a900461ffff1681565b6117eb611b82565b73ffffffffffffffffffffffffffffffffffffffff1661180961153d565b73ffffffffffffffffffffffffffffffffffffffff161461185f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118569061354f565b60405180910390fd5b81600a60008360ff1660ff168152602001908152602001600020819055505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61191d611b82565b73ffffffffffffffffffffffffffffffffffffffff1661193b61153d565b73ffffffffffffffffffffffffffffffffffffffff1614611991576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119889061354f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f790613ff7565b60405180910390fd5b611a098161211c565b50565b600d6020528060005260406000206000915090508054611a2b9061328a565b80601f0160208091040260200160405190810160405280929190818152602001828054611a579061328a565b8015611aa45780601f10611a7957610100808354040283529160200191611aa4565b820191906000526020600020905b815481529060010190602001808311611a8757829003601f168201915b505050505081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611bfd836112a5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c4e82611b16565b611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8490614089565b60405180910390fd5b6000611c98836112a5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611cda5750611cd98185611881565b5b80611d1857508373ffffffffffffffffffffffffffffffffffffffff16611d00846105ba565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d41826112a5565b73ffffffffffffffffffffffffffffffffffffffff1614611d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8e9061411b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfd906141ad565b60405180910390fd5b611e118383836124e3565b611e1c600082611b8a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e6c91906141cd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ec39190614201565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f828383836124e8565b505050565b600082611f9485846124ed565b1490509392505050565b606060008203611fe5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506120f9565b600082905060005b6000821461201757808061200090614257565b915050600a8261201091906142ce565b9150611fed565b60008167ffffffffffffffff81111561203357612032612c75565b5b6040519080825280601f01601f1916602001820160405280156120655781602001600182028036833780820191505090505b5090505b600085146120f25760018261207e91906141cd565b9150600a8561208d91906142ff565b60306120999190614201565b60f81b8183815181106120af576120ae614330565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120eb91906142ce565b9450612069565b8093505050505b919050565b612118828260405180602001604052806000815250612543565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612250576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612247906143ab565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123419190612a17565b60405180910390a3505050565b612359848484611d21565b6123658484848461259e565b6123a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239b9061443d565b60405180910390fd5b50505050565b6060600880546123b99061328a565b80601f01602080910402602001604051908101604052809291908181526020018280546123e59061328a565b80156124325780601f1061240757610100808354040283529160200191612432565b820191906000526020600020905b81548152906001019060200180831161241557829003601f168201915b5050505050905090565b606061244782611b16565b612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d906144cf565b60405180910390fd5b60006124906123aa565b905060008151116124b057604051806020016040528060008152506124db565b806124ba84611f9e565b6040516020016124cb929190613f61565b6040516020818303038152906040525b915050919050565b505050565b505050565b60008082905060005b8451811015612538576125238286838151811061251657612515614330565b5b6020026020010151612725565b9150808061253090614257565b9150506124f6565b508091505092915050565b61254d8383612750565b61255a600084848461259e565b612599576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125909061443d565b60405180910390fd5b505050565b60006125bf8473ffffffffffffffffffffffffffffffffffffffff16612929565b15612718578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125e8611b82565b8786866040518563ffffffff1660e01b815260040161260a9493929190614544565b6020604051808303816000875af192505050801561264657506040513d601f19601f8201168201806040525081019061264391906145a5565b60015b6126c8573d8060008114612676576040519150601f19603f3d011682016040523d82523d6000602084013e61267b565b606091505b5060008151036126c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b79061443d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061271d565b600190505b949350505050565b600081831061273d57612738828461294c565b612748565b612747838361294c565b5b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b69061461e565b60405180910390fd5b6127c881611b16565b15612808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ff9061468a565b60405180910390fd5b612814600083836124e3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128649190614201565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612925600083836124e8565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129ac81612977565b81146129b757600080fd5b50565b6000813590506129c9816129a3565b92915050565b6000602082840312156129e5576129e461296d565b5b60006129f3848285016129ba565b91505092915050565b60008115159050919050565b612a11816129fc565b82525050565b6000602082019050612a2c6000830184612a08565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a6c578082015181840152602081019050612a51565b83811115612a7b576000848401525b50505050565b6000601f19601f8301169050919050565b6000612a9d82612a32565b612aa78185612a3d565b9350612ab7818560208601612a4e565b612ac081612a81565b840191505092915050565b60006020820190508181036000830152612ae58184612a92565b905092915050565b6000819050919050565b612b0081612aed565b8114612b0b57600080fd5b50565b600081359050612b1d81612af7565b92915050565b600060208284031215612b3957612b3861296d565b5b6000612b4784828501612b0e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b7b82612b50565b9050919050565b612b8b81612b70565b82525050565b6000602082019050612ba66000830184612b82565b92915050565b612bb581612b70565b8114612bc057600080fd5b50565b600081359050612bd281612bac565b92915050565b60008060408385031215612bef57612bee61296d565b5b6000612bfd85828601612bc3565b9250506020612c0e85828601612b0e565b9150509250929050565b600080600060608486031215612c3157612c3061296d565b5b6000612c3f86828701612bc3565b9350506020612c5086828701612bc3565b9250506040612c6186828701612b0e565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612cad82612a81565b810181811067ffffffffffffffff82111715612ccc57612ccb612c75565b5b80604052505050565b6000612cdf612963565b9050612ceb8282612ca4565b919050565b600067ffffffffffffffff821115612d0b57612d0a612c75565b5b612d1482612a81565b9050602081019050919050565b82818337600083830152505050565b6000612d43612d3e84612cf0565b612cd5565b905082815260208101848484011115612d5f57612d5e612c70565b5b612d6a848285612d21565b509392505050565b600082601f830112612d8757612d86612c6b565b5b8135612d97848260208601612d30565b91505092915050565b600060208284031215612db657612db561296d565b5b600082013567ffffffffffffffff811115612dd457612dd3612972565b5b612de084828501612d72565b91505092915050565b600067ffffffffffffffff821115612e0457612e03612c75565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b612e2d81612e1a565b8114612e3857600080fd5b50565b600081359050612e4a81612e24565b92915050565b6000612e63612e5e84612de9565b612cd5565b90508083825260208201905060208402830185811115612e8657612e85612e15565b5b835b81811015612eaf5780612e9b8882612e3b565b845260208401935050602081019050612e88565b5050509392505050565b600082601f830112612ece57612ecd612c6b565b5b8135612ede848260208601612e50565b91505092915050565b600060ff82169050919050565b612efd81612ee7565b8114612f0857600080fd5b50565b600081359050612f1a81612ef4565b92915050565b600080600060608486031215612f3957612f3861296d565b5b600084013567ffffffffffffffff811115612f5757612f56612972565b5b612f6386828701612eb9565b9350506020612f7486828701612b0e565b9250506040612f8586828701612f0b565b9150509250925092565b600060208284031215612fa557612fa461296d565b5b6000612fb384828501612bc3565b91505092915050565b612fc581612aed565b82525050565b6000602082019050612fe06000830184612fbc565b92915050565b612fef816129fc565b8114612ffa57600080fd5b50565b60008135905061300c81612fe6565b92915050565b600080604083850312156130295761302861296d565b5b600061303785828601612bc3565b925050602061304885828601612ffd565b9150509250929050565b600067ffffffffffffffff82111561306d5761306c612c75565b5b61307682612a81565b9050602081019050919050565b600061309661309184613052565b612cd5565b9050828152602081018484840111156130b2576130b1612c70565b5b6130bd848285612d21565b509392505050565b600082601f8301126130da576130d9612c6b565b5b81356130ea848260208601613083565b91505092915050565b6000806000806080858703121561310d5761310c61296d565b5b600061311b87828801612bc3565b945050602061312c87828801612bc3565b935050604061313d87828801612b0e565b925050606085013567ffffffffffffffff81111561315e5761315d612972565b5b61316a878288016130c5565b91505092959194509250565b60006020828403121561318c5761318b61296d565b5b600061319a84828501612f0b565b91505092915050565b600061ffff82169050919050565b6131ba816131a3565b82525050565b60006020820190506131d560008301846131b1565b92915050565b600080604083850312156131f2576131f161296d565b5b600061320085828601612e3b565b925050602061321185828601612f0b565b9150509250929050565b600080604083850312156132325761323161296d565b5b600061324085828601612bc3565b925050602061325185828601612bc3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806132a257607f821691505b6020821081036132b5576132b461325b565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613317602c83612a3d565b9150613322826132bb565b604082019050919050565b600060208201905081810360008301526133468161330a565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006133a9602183612a3d565b91506133b48261334d565b604082019050919050565b600060208201905081810360008301526133d88161339c565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061343b603883612a3d565b9150613446826133df565b604082019050919050565b6000602082019050818103600083015261346a8161342e565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006134cd603183612a3d565b91506134d882613471565b604082019050919050565b600060208201905081810360008301526134fc816134c0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613539602083612a3d565b915061354482613503565b602082019050919050565b600060208201905081810360008301526135688161352c565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026135d17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613594565b6135db8683613594565b95508019841693508086168417925050509392505050565b6000819050919050565b600061361861361361360e84612aed565b6135f3565b612aed565b9050919050565b6000819050919050565b613632836135fd565b61364661363e8261361f565b8484546135a1565b825550505050565b600090565b61365b61364e565b613666818484613629565b505050565b5b8181101561368a5761367f600082613653565b60018101905061366c565b5050565b601f8211156136cf576136a08161356f565b6136a984613584565b810160208510156136b8578190505b6136cc6136c485613584565b83018261366b565b50505b505050565b600082821c905092915050565b60006136f2600019846008026136d4565b1980831691505092915050565b600061370b83836136e1565b9150826002028217905092915050565b61372482612a32565b67ffffffffffffffff81111561373d5761373c612c75565b5b613747825461328a565b61375282828561368e565b600060209050601f8311600181146137855760008415613773578287015190505b61377d85826136ff565b8655506137e5565b601f1984166137938661356f565b60005b828110156137bb57848901518255600182019150602085019450602081019050613796565b868310156137d857848901516137d4601f8916826136e1565b8355505b6001600288020188555050505b505050505050565b60008160601b9050919050565b6000613805826137ed565b9050919050565b6000613817826137fa565b9050919050565b61382f61382a82612b70565b61380c565b82525050565b6000819050919050565b61385061384b82612aed565b613835565b82525050565b6000613862828561381e565b601482019150613872828461383f565b6020820191508190509392505050565b7f4e6f742077686974656c69737465642c2074727920616761696e206c6174657260008201527f20696620776520646f6e27742073656c6c2d6f75740000000000000000000000602082015250565b60006138de603583612a3d565b91506138e982613882565b604082019050919050565b6000602082019050818103600083015261390d816138d1565b9050919050565b7f3e4d494e54205041555345443c20496620796f752772652067657474696e672060008201527f74686973206d6573736167652c20736869742077656e7420646f776e2028616760208201527f61696e292e203e4d494e54205041555345443c00000000000000000000000000604082015250565b6000613996605383612a3d565b91506139a182613914565b606082019050919050565b600060208201905081810360008301526139c581613989565b9050919050565b7f4f6e6520636f6d6d756e6974792063616e20616e64206f6e6520636f6c6c616260008201527f2063616e207065722077616c6c65742121210000000000000000000000000000602082015250565b6000613a28603283612a3d565b9150613a33826139cc565b604082019050919050565b60006020820190508181036000830152613a5781613a1b565b9050919050565b7f4f6e6520636f6c6c61622063616e207065722077616c6c657400000000000000600082015250565b6000613a94601983612a3d565b9150613a9f82613a5e565b602082019050919050565b60006020820190508181036000830152613ac381613a87565b9050919050565b7f4f6e6520636f6d6d756e6974792063616e207065722077616c6c657400000000600082015250565b6000613b00601c83612a3d565b9150613b0b82613aca565b602082019050919050565b60006020820190508181036000830152613b2f81613af3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b7082612ee7565b915060ff8203613b8357613b82613b36565b5b600182019050919050565b7f536f6c64206f757420626f746865722c20646f6e27742062726f74686572203b60008201527f2900000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bea602183612a3d565b9150613bf582613b8e565b604082019050919050565b60006020820190508181036000830152613c1981613bdd565b9050919050565b6000613c2b826131a3565b9150613c36836131a3565b925082821015613c4957613c48613b36565b5b828203905092915050565b600081905092915050565b60008154613c6c8161328a565b613c768186613c54565b94506001821660008114613c915760018114613ca657613cd9565b60ff1983168652811515820286019350613cd9565b613caf8561356f565b60005b83811015613cd157815481890152600182019150602081019050613cb2565b838801955050505b50505092915050565b6000613ced82612a32565b613cf78185613c54565b9350613d07818560208601612a4e565b80840191505092915050565b6000613d1f8285613c5f565b9150613d2b8284613ce2565b91508190509392505050565b6000613d42826131a3565b9150613d4d836131a3565b92508161ffff0483118215151615613d6857613d67613b36565b5b828202905092915050565b6000613d7e826131a3565b9150613d89836131a3565b92508261ffff03821115613da057613d9f613b36565b5b828201905092915050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613e07602983612a3d565b9150613e1282613dab565b604082019050919050565b60006020820190508181036000830152613e3681613dfa565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613e99602a83612a3d565b9150613ea482613e3d565b604082019050919050565b60006020820190508181036000830152613ec881613e8c565b9050919050565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b6000613f2b603183612a3d565b9150613f3682613ecf565b604082019050919050565b60006020820190508181036000830152613f5a81613f1e565b9050919050565b6000613f6d8285613ce2565b9150613f798284613ce2565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fe1602683612a3d565b9150613fec82613f85565b604082019050919050565b6000602082019050818103600083015261401081613fd4565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614073602c83612a3d565b915061407e82614017565b604082019050919050565b600060208201905081810360008301526140a281614066565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614105602583612a3d565b9150614110826140a9565b604082019050919050565b60006020820190508181036000830152614134816140f8565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614197602483612a3d565b91506141a28261413b565b604082019050919050565b600060208201905081810360008301526141c68161418a565b9050919050565b60006141d882612aed565b91506141e383612aed565b9250828210156141f6576141f5613b36565b5b828203905092915050565b600061420c82612aed565b915061421783612aed565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561424c5761424b613b36565b5b828201905092915050565b600061426282612aed565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361429457614293613b36565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142d982612aed565b91506142e483612aed565b9250826142f4576142f361429f565b5b828204905092915050565b600061430a82612aed565b915061431583612aed565b9250826143255761432461429f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614395601983612a3d565b91506143a08261435f565b602082019050919050565b600060208201905081810360008301526143c481614388565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614427603283612a3d565b9150614432826143cb565b604082019050919050565b600060208201905081810360008301526144568161441a565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006144b9602f83612a3d565b91506144c48261445d565b604082019050919050565b600060208201905081810360008301526144e8816144ac565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614516826144ef565b61452081856144fa565b9350614530818560208601612a4e565b61453981612a81565b840191505092915050565b60006080820190506145596000830187612b82565b6145666020830186612b82565b6145736040830185612fbc565b8181036060830152614585818461450b565b905095945050505050565b60008151905061459f816129a3565b92915050565b6000602082840312156145bb576145ba61296d565b5b60006145c984828501614590565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614608602083612a3d565b9150614613826145d2565b602082019050919050565b60006020820190508181036000830152614637816145fb565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614674601c83612a3d565b915061467f8261463e565b602082019050919050565b600060208201905081810360008301526146a381614667565b905091905056fea26469706673582212207ce59a3371d326ddcd457477050170352c2c4c06a9e16b94212f97cca21b876764736f6c634300080f0033697066733a2f2f516d545476645a5a704d46765343486e416f3346714659354363636972595272464333475a36647258685034426e2f

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c3578063c87b56dd1161007c578063c87b56dd1461034e578063dfb4b1641461037e578063e8feeb3a146103ae578063e985e9c5146103ca578063f2fde38b146103fa578063fc1fc5c3146104165761014d565b8063715018a6146102c6578063836070e6146102d05780638da5cb5b146102da57806395d89b41146102f8578063a22cb46514610316578063b88d4fde146103325761014d565b806336bf9e301161011557806336bf9e301461020857806342842e0e1461021257806355f804b31461022e578063607b95a91461024a5780636352211e1461026657806370a08231146102965761014d565b806301ffc9a71461015257806306fdde0314610182578063081812fc146101a0578063095ea7b3146101d057806323b872dd146101ec575b600080fd5b61016c600480360381019061016791906129cf565b610446565b6040516101799190612a17565b60405180910390f35b61018a610528565b6040516101979190612acb565b60405180910390f35b6101ba60048036038101906101b59190612b23565b6105ba565b6040516101c79190612b91565b60405180910390f35b6101ea60048036038101906101e59190612bd8565b61063f565b005b61020660048036038101906102019190612c18565b610756565b005b6102106107b6565b005b61022c60048036038101906102279190612c18565b61085e565b005b61024860048036038101906102439190612da0565b61087e565b005b610264600480360381019061025f9190612f20565b61090d565b005b610280600480360381019061027b9190612b23565b6112a5565b60405161028d9190612b91565b60405180910390f35b6102b060048036038101906102ab9190612f8f565b611356565b6040516102bd9190612fcb565b60405180910390f35b6102ce61140d565b005b6102d8611495565b005b6102e261153d565b6040516102ef9190612b91565b60405180910390f35b610300611567565b60405161030d9190612acb565b60405180910390f35b610330600480360381019061032b9190613012565b6115f9565b005b61034c600480360381019061034791906130f3565b61160f565b005b61036860048036038101906103639190612b23565b611671565b6040516103759190612acb565b60405180910390f35b61039860048036038101906103939190613176565b6117c2565b6040516103a591906131c0565b60405180910390f35b6103c860048036038101906103c391906131db565b6117e3565b005b6103e460048036038101906103df919061321b565b611881565b6040516103f19190612a17565b60405180910390f35b610414600480360381019061040f9190612f8f565b611915565b005b610430600480360381019061042b9190612f8f565b611a0c565b60405161043d9190612acb565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061051157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610521575061052082611aac565b5b9050919050565b6060600080546105379061328a565b80601f01602080910402602001604051908101604052809291908181526020018280546105639061328a565b80156105b05780601f10610585576101008083540402835291602001916105b0565b820191906000526020600020905b81548152906001019060200180831161059357829003601f168201915b5050505050905090565b60006105c582611b16565b610604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fb9061332d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061064a826112a5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b1906133bf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106d9611b82565b73ffffffffffffffffffffffffffffffffffffffff161480610708575061070781610702611b82565b611881565b5b610747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073e90613451565b60405180910390fd5b6107518383611b8a565b505050565b610767610761611b82565b82611c43565b6107a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079d906134e3565b60405180910390fd5b6107b1838383611d21565b505050565b6107be611b82565b73ffffffffffffffffffffffffffffffffffffffff166107dc61153d565b73ffffffffffffffffffffffffffffffffffffffff1614610832576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108299061354f565b60405180910390fd5b600960009054906101000a900460ff1615600960006101000a81548160ff021916908315150217905550565b6108798383836040518060200160405280600081525061160f565b505050565b610886611b82565b73ffffffffffffffffffffffffffffffffffffffff166108a461153d565b73ffffffffffffffffffffffffffffffffffffffff16146108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f19061354f565b60405180910390fd5b8060089081610909919061371b565b5050565b60048160ff1611156109a95761096583600a60008460ff1660ff16815260200190815260200160002054338560405160200161094a929190613856565b60405160208183030381529060405280519060200120611f87565b6109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b906138f4565b60405180910390fd5b610a4b565b600760149054906101000a900460ff1615610a4a57610a0a83600a60008460ff1660ff1681526020019081526020016000205433856040516020016109ef929190613856565b60405160208183030381529060405280519060200120611f87565b610a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a40906138f4565b60405180910390fd5b5b5b600960009054906101000a900460ff1615610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a92906139ac565b60405180910390fd5b6003600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1610610b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2490613a3e565b60405180910390fd5b60048160ff161115610bd0576002600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1603610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc290613aaa565b60405180910390fd5b610c63565b6001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1603610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5990613b16565b60405180910390fd5b5b6000600b60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff1661ffff16148015610ca1575060048160ff16105b15610d065760005b60048160ff161015610d04576000600b60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff1661ffff161115610cf157809150600490505b8080610cfc90613b65565b915050610ca9565b505b6000600b60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff1661ffff1611610d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6b90613c00565b60405180910390fd5b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1603610e935760048160ff161115610e34576002600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055610e8d565b6001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555b50610eed565b6003600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055505b6001600b60008360ff1660ff16815260200190815260200160002060008282829054906101000a900461ffff16610f249190613c20565b92506101000a81548161ffff021916908361ffff160217905550600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610f898260ff16611f9e565b604051602001610f9a929190613d13565b604051602081830303815290604052600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209081610ff4919061371b565b50600060058260ff161161104c57600e60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff166104578360ff1661103b9190613d37565b6110459190613d73565b9050611240565b60068260ff160361109357600e60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff166116ad61108c9190613d73565b905061123f565b60078260ff16036110da57600e60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff166117116110d39190613d73565b905061123e565b60088260ff160361112157600e60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff1661180b61111a9190613d73565b905061123d565b60098260ff160361116857600e60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff166119056111619190613d73565b905061123c565b600a8260ff16036111af57600e60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff166119ff6111a89190613d73565b905061123b565b600b8260ff16036111f657600e60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff16611a316111ef9190613d73565b905061123a565b600c8260ff160361123957600e60008360ff1660ff16815260200190815260200160002060009054906101000a900461ffff16611ac76112369190613d73565b90505b5b5b5b5b5b5b5b6001600e60008460ff1660ff16815260200190815260200160002060008282829054906101000a900461ffff166112779190613d73565b92506101000a81548161ffff021916908361ffff16021790555061129f338261ffff166120fe565b50505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361134d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134490613e1d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bd90613eaf565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611415611b82565b73ffffffffffffffffffffffffffffffffffffffff1661143361153d565b73ffffffffffffffffffffffffffffffffffffffff1614611489576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114809061354f565b60405180910390fd5b611493600061211c565b565b61149d611b82565b73ffffffffffffffffffffffffffffffffffffffff166114bb61153d565b73ffffffffffffffffffffffffffffffffffffffff1614611511576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115089061354f565b60405180910390fd5b600760149054906101000a900460ff1615600760146101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546115769061328a565b80601f01602080910402602001604051908101604052809291908181526020018280546115a29061328a565b80156115ef5780601f106115c4576101008083540402835291602001916115ef565b820191906000526020600020905b8154815290600101906020018083116115d257829003601f168201915b5050505050905090565b61160b611604611b82565b83836121e2565b5050565b61162061161a611b82565b83611c43565b61165f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611656906134e3565b60405180910390fd5b61166b8484848461234e565b50505050565b606061167c82611b16565b6116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b290613f41565b60405180910390fd5b60006006600084815260200190815260200160002080546116db9061328a565b80601f01602080910402602001604051908101604052809291908181526020018280546117079061328a565b80156117545780601f1061172957610100808354040283529160200191611754565b820191906000526020600020905b81548152906001019060200180831161173757829003601f168201915b5050505050905060006117656123aa565b9050600081510361177a5781925050506117bd565b6000825111156117af578082604051602001611797929190613f61565b604051602081830303815290604052925050506117bd565b6117b88461243c565b925050505b919050565b600b6020528060005260406000206000915054906101000a900461ffff1681565b6117eb611b82565b73ffffffffffffffffffffffffffffffffffffffff1661180961153d565b73ffffffffffffffffffffffffffffffffffffffff161461185f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118569061354f565b60405180910390fd5b81600a60008360ff1660ff168152602001908152602001600020819055505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61191d611b82565b73ffffffffffffffffffffffffffffffffffffffff1661193b61153d565b73ffffffffffffffffffffffffffffffffffffffff1614611991576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119889061354f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f790613ff7565b60405180910390fd5b611a098161211c565b50565b600d6020528060005260406000206000915090508054611a2b9061328a565b80601f0160208091040260200160405190810160405280929190818152602001828054611a579061328a565b8015611aa45780601f10611a7957610100808354040283529160200191611aa4565b820191906000526020600020905b815481529060010190602001808311611a8757829003601f168201915b505050505081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611bfd836112a5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c4e82611b16565b611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8490614089565b60405180910390fd5b6000611c98836112a5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611cda5750611cd98185611881565b5b80611d1857508373ffffffffffffffffffffffffffffffffffffffff16611d00846105ba565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d41826112a5565b73ffffffffffffffffffffffffffffffffffffffff1614611d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8e9061411b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfd906141ad565b60405180910390fd5b611e118383836124e3565b611e1c600082611b8a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e6c91906141cd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ec39190614201565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f828383836124e8565b505050565b600082611f9485846124ed565b1490509392505050565b606060008203611fe5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506120f9565b600082905060005b6000821461201757808061200090614257565b915050600a8261201091906142ce565b9150611fed565b60008167ffffffffffffffff81111561203357612032612c75565b5b6040519080825280601f01601f1916602001820160405280156120655781602001600182028036833780820191505090505b5090505b600085146120f25760018261207e91906141cd565b9150600a8561208d91906142ff565b60306120999190614201565b60f81b8183815181106120af576120ae614330565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120eb91906142ce565b9450612069565b8093505050505b919050565b612118828260405180602001604052806000815250612543565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612250576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612247906143ab565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123419190612a17565b60405180910390a3505050565b612359848484611d21565b6123658484848461259e565b6123a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239b9061443d565b60405180910390fd5b50505050565b6060600880546123b99061328a565b80601f01602080910402602001604051908101604052809291908181526020018280546123e59061328a565b80156124325780601f1061240757610100808354040283529160200191612432565b820191906000526020600020905b81548152906001019060200180831161241557829003601f168201915b5050505050905090565b606061244782611b16565b612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d906144cf565b60405180910390fd5b60006124906123aa565b905060008151116124b057604051806020016040528060008152506124db565b806124ba84611f9e565b6040516020016124cb929190613f61565b6040516020818303038152906040525b915050919050565b505050565b505050565b60008082905060005b8451811015612538576125238286838151811061251657612515614330565b5b6020026020010151612725565b9150808061253090614257565b9150506124f6565b508091505092915050565b61254d8383612750565b61255a600084848461259e565b612599576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125909061443d565b60405180910390fd5b505050565b60006125bf8473ffffffffffffffffffffffffffffffffffffffff16612929565b15612718578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125e8611b82565b8786866040518563ffffffff1660e01b815260040161260a9493929190614544565b6020604051808303816000875af192505050801561264657506040513d601f19601f8201168201806040525081019061264391906145a5565b60015b6126c8573d8060008114612676576040519150601f19603f3d011682016040523d82523d6000602084013e61267b565b606091505b5060008151036126c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b79061443d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061271d565b600190505b949350505050565b600081831061273d57612738828461294c565b612748565b612747838361294c565b5b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b69061461e565b60405180910390fd5b6127c881611b16565b15612808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ff9061468a565b60405180910390fd5b612814600083836124e3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128649190614201565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612925600083836124e8565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129ac81612977565b81146129b757600080fd5b50565b6000813590506129c9816129a3565b92915050565b6000602082840312156129e5576129e461296d565b5b60006129f3848285016129ba565b91505092915050565b60008115159050919050565b612a11816129fc565b82525050565b6000602082019050612a2c6000830184612a08565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a6c578082015181840152602081019050612a51565b83811115612a7b576000848401525b50505050565b6000601f19601f8301169050919050565b6000612a9d82612a32565b612aa78185612a3d565b9350612ab7818560208601612a4e565b612ac081612a81565b840191505092915050565b60006020820190508181036000830152612ae58184612a92565b905092915050565b6000819050919050565b612b0081612aed565b8114612b0b57600080fd5b50565b600081359050612b1d81612af7565b92915050565b600060208284031215612b3957612b3861296d565b5b6000612b4784828501612b0e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b7b82612b50565b9050919050565b612b8b81612b70565b82525050565b6000602082019050612ba66000830184612b82565b92915050565b612bb581612b70565b8114612bc057600080fd5b50565b600081359050612bd281612bac565b92915050565b60008060408385031215612bef57612bee61296d565b5b6000612bfd85828601612bc3565b9250506020612c0e85828601612b0e565b9150509250929050565b600080600060608486031215612c3157612c3061296d565b5b6000612c3f86828701612bc3565b9350506020612c5086828701612bc3565b9250506040612c6186828701612b0e565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612cad82612a81565b810181811067ffffffffffffffff82111715612ccc57612ccb612c75565b5b80604052505050565b6000612cdf612963565b9050612ceb8282612ca4565b919050565b600067ffffffffffffffff821115612d0b57612d0a612c75565b5b612d1482612a81565b9050602081019050919050565b82818337600083830152505050565b6000612d43612d3e84612cf0565b612cd5565b905082815260208101848484011115612d5f57612d5e612c70565b5b612d6a848285612d21565b509392505050565b600082601f830112612d8757612d86612c6b565b5b8135612d97848260208601612d30565b91505092915050565b600060208284031215612db657612db561296d565b5b600082013567ffffffffffffffff811115612dd457612dd3612972565b5b612de084828501612d72565b91505092915050565b600067ffffffffffffffff821115612e0457612e03612c75565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b612e2d81612e1a565b8114612e3857600080fd5b50565b600081359050612e4a81612e24565b92915050565b6000612e63612e5e84612de9565b612cd5565b90508083825260208201905060208402830185811115612e8657612e85612e15565b5b835b81811015612eaf5780612e9b8882612e3b565b845260208401935050602081019050612e88565b5050509392505050565b600082601f830112612ece57612ecd612c6b565b5b8135612ede848260208601612e50565b91505092915050565b600060ff82169050919050565b612efd81612ee7565b8114612f0857600080fd5b50565b600081359050612f1a81612ef4565b92915050565b600080600060608486031215612f3957612f3861296d565b5b600084013567ffffffffffffffff811115612f5757612f56612972565b5b612f6386828701612eb9565b9350506020612f7486828701612b0e565b9250506040612f8586828701612f0b565b9150509250925092565b600060208284031215612fa557612fa461296d565b5b6000612fb384828501612bc3565b91505092915050565b612fc581612aed565b82525050565b6000602082019050612fe06000830184612fbc565b92915050565b612fef816129fc565b8114612ffa57600080fd5b50565b60008135905061300c81612fe6565b92915050565b600080604083850312156130295761302861296d565b5b600061303785828601612bc3565b925050602061304885828601612ffd565b9150509250929050565b600067ffffffffffffffff82111561306d5761306c612c75565b5b61307682612a81565b9050602081019050919050565b600061309661309184613052565b612cd5565b9050828152602081018484840111156130b2576130b1612c70565b5b6130bd848285612d21565b509392505050565b600082601f8301126130da576130d9612c6b565b5b81356130ea848260208601613083565b91505092915050565b6000806000806080858703121561310d5761310c61296d565b5b600061311b87828801612bc3565b945050602061312c87828801612bc3565b935050604061313d87828801612b0e565b925050606085013567ffffffffffffffff81111561315e5761315d612972565b5b61316a878288016130c5565b91505092959194509250565b60006020828403121561318c5761318b61296d565b5b600061319a84828501612f0b565b91505092915050565b600061ffff82169050919050565b6131ba816131a3565b82525050565b60006020820190506131d560008301846131b1565b92915050565b600080604083850312156131f2576131f161296d565b5b600061320085828601612e3b565b925050602061321185828601612f0b565b9150509250929050565b600080604083850312156132325761323161296d565b5b600061324085828601612bc3565b925050602061325185828601612bc3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806132a257607f821691505b6020821081036132b5576132b461325b565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613317602c83612a3d565b9150613322826132bb565b604082019050919050565b600060208201905081810360008301526133468161330a565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006133a9602183612a3d565b91506133b48261334d565b604082019050919050565b600060208201905081810360008301526133d88161339c565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061343b603883612a3d565b9150613446826133df565b604082019050919050565b6000602082019050818103600083015261346a8161342e565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006134cd603183612a3d565b91506134d882613471565b604082019050919050565b600060208201905081810360008301526134fc816134c0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613539602083612a3d565b915061354482613503565b602082019050919050565b600060208201905081810360008301526135688161352c565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026135d17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613594565b6135db8683613594565b95508019841693508086168417925050509392505050565b6000819050919050565b600061361861361361360e84612aed565b6135f3565b612aed565b9050919050565b6000819050919050565b613632836135fd565b61364661363e8261361f565b8484546135a1565b825550505050565b600090565b61365b61364e565b613666818484613629565b505050565b5b8181101561368a5761367f600082613653565b60018101905061366c565b5050565b601f8211156136cf576136a08161356f565b6136a984613584565b810160208510156136b8578190505b6136cc6136c485613584565b83018261366b565b50505b505050565b600082821c905092915050565b60006136f2600019846008026136d4565b1980831691505092915050565b600061370b83836136e1565b9150826002028217905092915050565b61372482612a32565b67ffffffffffffffff81111561373d5761373c612c75565b5b613747825461328a565b61375282828561368e565b600060209050601f8311600181146137855760008415613773578287015190505b61377d85826136ff565b8655506137e5565b601f1984166137938661356f565b60005b828110156137bb57848901518255600182019150602085019450602081019050613796565b868310156137d857848901516137d4601f8916826136e1565b8355505b6001600288020188555050505b505050505050565b60008160601b9050919050565b6000613805826137ed565b9050919050565b6000613817826137fa565b9050919050565b61382f61382a82612b70565b61380c565b82525050565b6000819050919050565b61385061384b82612aed565b613835565b82525050565b6000613862828561381e565b601482019150613872828461383f565b6020820191508190509392505050565b7f4e6f742077686974656c69737465642c2074727920616761696e206c6174657260008201527f20696620776520646f6e27742073656c6c2d6f75740000000000000000000000602082015250565b60006138de603583612a3d565b91506138e982613882565b604082019050919050565b6000602082019050818103600083015261390d816138d1565b9050919050565b7f3e4d494e54205041555345443c20496620796f752772652067657474696e672060008201527f74686973206d6573736167652c20736869742077656e7420646f776e2028616760208201527f61696e292e203e4d494e54205041555345443c00000000000000000000000000604082015250565b6000613996605383612a3d565b91506139a182613914565b606082019050919050565b600060208201905081810360008301526139c581613989565b9050919050565b7f4f6e6520636f6d6d756e6974792063616e20616e64206f6e6520636f6c6c616260008201527f2063616e207065722077616c6c65742121210000000000000000000000000000602082015250565b6000613a28603283612a3d565b9150613a33826139cc565b604082019050919050565b60006020820190508181036000830152613a5781613a1b565b9050919050565b7f4f6e6520636f6c6c61622063616e207065722077616c6c657400000000000000600082015250565b6000613a94601983612a3d565b9150613a9f82613a5e565b602082019050919050565b60006020820190508181036000830152613ac381613a87565b9050919050565b7f4f6e6520636f6d6d756e6974792063616e207065722077616c6c657400000000600082015250565b6000613b00601c83612a3d565b9150613b0b82613aca565b602082019050919050565b60006020820190508181036000830152613b2f81613af3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b7082612ee7565b915060ff8203613b8357613b82613b36565b5b600182019050919050565b7f536f6c64206f757420626f746865722c20646f6e27742062726f74686572203b60008201527f2900000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bea602183612a3d565b9150613bf582613b8e565b604082019050919050565b60006020820190508181036000830152613c1981613bdd565b9050919050565b6000613c2b826131a3565b9150613c36836131a3565b925082821015613c4957613c48613b36565b5b828203905092915050565b600081905092915050565b60008154613c6c8161328a565b613c768186613c54565b94506001821660008114613c915760018114613ca657613cd9565b60ff1983168652811515820286019350613cd9565b613caf8561356f565b60005b83811015613cd157815481890152600182019150602081019050613cb2565b838801955050505b50505092915050565b6000613ced82612a32565b613cf78185613c54565b9350613d07818560208601612a4e565b80840191505092915050565b6000613d1f8285613c5f565b9150613d2b8284613ce2565b91508190509392505050565b6000613d42826131a3565b9150613d4d836131a3565b92508161ffff0483118215151615613d6857613d67613b36565b5b828202905092915050565b6000613d7e826131a3565b9150613d89836131a3565b92508261ffff03821115613da057613d9f613b36565b5b828201905092915050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613e07602983612a3d565b9150613e1282613dab565b604082019050919050565b60006020820190508181036000830152613e3681613dfa565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613e99602a83612a3d565b9150613ea482613e3d565b604082019050919050565b60006020820190508181036000830152613ec881613e8c565b9050919050565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b6000613f2b603183612a3d565b9150613f3682613ecf565b604082019050919050565b60006020820190508181036000830152613f5a81613f1e565b9050919050565b6000613f6d8285613ce2565b9150613f798284613ce2565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fe1602683612a3d565b9150613fec82613f85565b604082019050919050565b6000602082019050818103600083015261401081613fd4565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614073602c83612a3d565b915061407e82614017565b604082019050919050565b600060208201905081810360008301526140a281614066565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614105602583612a3d565b9150614110826140a9565b604082019050919050565b60006020820190508181036000830152614134816140f8565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614197602483612a3d565b91506141a28261413b565b604082019050919050565b600060208201905081810360008301526141c68161418a565b9050919050565b60006141d882612aed565b91506141e383612aed565b9250828210156141f6576141f5613b36565b5b828203905092915050565b600061420c82612aed565b915061421783612aed565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561424c5761424b613b36565b5b828201905092915050565b600061426282612aed565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361429457614293613b36565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142d982612aed565b91506142e483612aed565b9250826142f4576142f361429f565b5b828204905092915050565b600061430a82612aed565b915061431583612aed565b9250826143255761432461429f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614395601983612a3d565b91506143a08261435f565b602082019050919050565b600060208201905081810360008301526143c481614388565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614427603283612a3d565b9150614432826143cb565b604082019050919050565b600060208201905081810360008301526144568161441a565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006144b9602f83612a3d565b91506144c48261445d565b604082019050919050565b600060208201905081810360008301526144e8816144ac565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614516826144ef565b61452081856144fa565b9350614530818560208601612a4e565b61453981612a81565b840191505092915050565b60006080820190506145596000830187612b82565b6145666020830186612b82565b6145736040830185612fbc565b8181036060830152614585818461450b565b905095945050505050565b60008151905061459f816129a3565b92915050565b6000602082840312156145bb576145ba61296d565b5b60006145c984828501614590565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614608602083612a3d565b9150614613826145d2565b602082019050919050565b60006020820190508181036000830152614637816145fb565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614674601c83612a3d565b915061467f8261463e565b602082019050919050565b600060208201905081810360008301526146a381614667565b905091905056fea26469706673582212207ce59a3371d326ddcd457477050170352c2c4c06a9e16b94212f97cca21b876764736f6c634300080f0033

Deployed Bytecode Sourcemap

54024:6490:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45229:293;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45999:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47092:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46671:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47662:288;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57028:93;;;:::i;:::-;;47960:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56867:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57543:2966;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45750:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45532:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38501:103;;;:::i;:::-;;57129:108;;;:::i;:::-;;38278:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46109:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47323:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48155:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52977:534;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54471:40;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57390:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47488:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38612:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54648:43;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45229:293;45331:4;45379:25;45364:40;;;:11;:40;;;;:101;;;;45432:33;45417:48;;;:11;:48;;;;45364:101;:150;;;;45478:36;45502:11;45478:23;:36::i;:::-;45364:150;45348:166;;45229:293;;;:::o;45999:100::-;46053:13;46086:5;46079:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45999:100;:::o;47092:221::-;47168:7;47196:16;47204:7;47196;:16::i;:::-;47188:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;47281:15;:24;47297:7;47281:24;;;;;;;;;;;;;;;;;;;;;47274:31;;47092:221;;;:::o;46671:411::-;46752:13;46768:23;46783:7;46768:14;:23::i;:::-;46752:39;;46816:5;46810:11;;:2;:11;;;46802:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;46910:5;46894:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;46919:37;46936:5;46943:12;:10;:12::i;:::-;46919:16;:37::i;:::-;46894:62;46872:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;47053:21;47062:2;47066:7;47053:8;:21::i;:::-;46741:341;46671:411;;:::o;47662:288::-;47806:41;47825:12;:10;:12::i;:::-;47839:7;47806:18;:41::i;:::-;47798:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;47914:28;47924:4;47930:2;47934:7;47914:9;:28::i;:::-;47662:288;;;:::o;57028:93::-;38424:12;:10;:12::i;:::-;38413:23;;:7;:5;:7::i;:::-;:23;;;38405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57102:11:::1;;;;;;;;;;;57101:12;57087:11;;:26;;;;;;;;;;;;;;;;;;57028:93::o:0;47960:185::-;48098:39;48115:4;48121:2;48125:7;48098:39;;;;;;;;;;;;:16;:39::i;:::-;47960:185;;;:::o;56867:111::-;38424:12;:10;:12::i;:::-;38413:23;;:7;:5;:7::i;:::-;:23;;;38405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56962:8:::1;56943:16;:27;;;;;;:::i;:::-;;56867:111:::0;:::o;57543:2966::-;57647:1;57637:7;:11;;;57634:604;;;57673:165;57714:5;57742:16;:25;57759:7;57742:25;;;;;;;;;;;;;;;;57817:10;57829:6;57800:36;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57790:47;;;;;;57673:18;:165::i;:::-;57665:231;;;;;;;;;;;;:::i;:::-;;;;;;;;;57634:604;;;57933:14;;;;;;;;;;;57929:298;;;57976:177;58021:5;58053:16;:25;58070:7;58053:25;;;;;;;;;;;;;;;;58132:10;58144:6;58115:36;;;;;;;;;:::i;:::-;;;;;;;;;;;;;58105:47;;;;;;57976:18;:177::i;:::-;57968:243;;;;;;;;;;;;:::i;:::-;;;;;;;;;57929:298;57634:604;58259:11;;;;;;;;;;;58258:12;58250:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;58407:1;58379:13;:25;58393:10;58379:25;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;58371:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;58489:1;58479:7;:11;;;58476:217;;;58544:1;58515:13;:25;58529:10;58515:25;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;58507:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58476:217;;;58647:1;58618:13;:25;58632:10;58618:25;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;58610:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;58476:217;58914:1;58893:8;:17;58902:7;58893:17;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;:37;;;;;58929:1;58919:7;:11;;;58893:37;58890:233;;;58951:7;58947:165;58968:1;58964;:5;;;58947:165;;;59012:1;58998:8;:11;59007:1;58998:11;;;;;;;;;;;;;;;;;;;;;;;;;:15;;;58995:102;;;59048:1;59038:11;;59076:1;59072:5;;58995:102;58971:3;;;;;:::i;:::-;;;;58947:165;;;;58890:233;59216:1;59196:8;:17;59205:7;59196:17;;;;;;;;;;;;;;;;;;;;;;;;;:21;;;59188:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;59300:1;59271:13;:25;59285:10;59271:25;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;59268:200;;59329:1;59318:7;:12;;;;:76;;59393:1;59365:13;:25;59379:10;59365:25;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;59318:76;;;59361:1;59333:13;:25;59347:10;59333:25;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;59318:76;;59268:200;;;59455:1;59427:13;:25;59441:10;59427:25;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;59268:200;59501:1;59480:8;:17;59489:7;59480:17;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;59553:9;:21;59563:10;59553:21;;;;;;;;;;;;;;;59576:25;59593:7;59576:25;;:16;:25::i;:::-;59539:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;59515:9;:21;59525:10;59515:21;;;;;;;;;;;;;;;:87;;;;;;:::i;:::-;;59615:15;59723:1;59712:7;:12;;;59708:713;;59771:10;:19;59782:7;59771:19;;;;;;;;;;;;;;;;;;;;;;;;;59763:4;59753:7;:14;;;;;;:::i;:::-;59752:38;;;;:::i;:::-;59741:49;;59708:713;;;59823:1;59812:7;:12;;;59808:613;;59859:10;:19;59870:7;59859:19;;;;;;;;;;;;;;;;;;;;;;;;;59852:4;:26;;;;:::i;:::-;59841:37;;59808:613;;;59911:1;59900:7;:12;;;59896:525;;59947:10;:19;59958:7;59947:19;;;;;;;;;;;;;;;;;;;;;;;;;59940:4;:26;;;;:::i;:::-;59929:37;;59896:525;;;59999:1;59988:7;:12;;;59984:437;;60035:10;:19;60046:7;60035:19;;;;;;;;;;;;;;;;;;;;;;;;;60028:4;:26;;;;:::i;:::-;60017:37;;59984:437;;;60087:1;60076:7;:12;;;60072:349;;60123:10;:19;60134:7;60123:19;;;;;;;;;;;;;;;;;;;;;;;;;60116:4;:26;;;;:::i;:::-;60105:37;;60072:349;;;60175:2;60164:7;:13;;;60160:261;;60212:10;:19;60223:7;60212:19;;;;;;;;;;;;;;;;;;;;;;;;;60205:4;:26;;;;:::i;:::-;60194:37;;60160:261;;;60264:2;60253:7;:13;;;60249:172;;60301:10;:19;60312:7;60301:19;;;;;;;;;;;;;;;;;;;;;;;;;60294:4;:26;;;;:::i;:::-;60283:37;;60249:172;;;60353:2;60342:7;:13;;;60338:83;;60390:10;:19;60401:7;60390:19;;;;;;;;;;;;;;;;;;;;;;;;;60383:4;:26;;;;:::i;:::-;60372:37;;60338:83;60249:172;60160:261;60072:349;59984:437;59896:525;59808:613;59708:713;60456:1;60433:10;:19;60444:7;60433:19;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;60468:31;60478:10;60490:8;60468:31;;:9;:31::i;:::-;57621:2888;57543:2966;;;:::o;45750:239::-;45822:7;45842:13;45858:7;:16;45866:7;45858:16;;;;;;;;;;;;;;;;;;;;;45842:32;;45910:1;45893:19;;:5;:19;;;45885:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45976:5;45969:12;;;45750:239;;;:::o;45532:208::-;45604:7;45649:1;45632:19;;:5;:19;;;45624:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;45716:9;:16;45726:5;45716:16;;;;;;;;;;;;;;;;45709:23;;45532:208;;;:::o;38501:103::-;38424:12;:10;:12::i;:::-;38413:23;;:7;:5;:7::i;:::-;:23;;;38405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38566:30:::1;38593:1;38566:18;:30::i;:::-;38501:103::o:0;57129:108::-;38424:12;:10;:12::i;:::-;38413:23;;:7;:5;:7::i;:::-;:23;;;38405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57215:14:::1;;;;;;;;;;;57214:15;57197:14;;:32;;;;;;;;;;;;;;;;;;57129:108::o:0;38278:87::-;38324:7;38351:6;;;;;;;;;;;38344:13;;38278:87;:::o;46109:104::-;46165:13;46198:7;46191:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46109:104;:::o;47323:155::-;47418:52;47437:12;:10;:12::i;:::-;47451:8;47461;47418:18;:52::i;:::-;47323:155;;:::o;48155:328::-;48330:41;48349:12;:10;:12::i;:::-;48363:7;48330:18;:41::i;:::-;48322:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;48436:39;48450:4;48456:2;48460:7;48469:5;48436:13;:39::i;:::-;48155:328;;;;:::o;52977:534::-;53050:13;53084:16;53092:7;53084;:16::i;:::-;53076:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;53167:23;53193:10;:19;53204:7;53193:19;;;;;;;;;;;53167:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53223:18;53244:10;:8;:10::i;:::-;53223:31;;53295:1;53279:4;53273:18;:23;53269:72;;53320:9;53313:16;;;;;;53269:72;53383:1;53363:9;53357:23;:27;53353:108;;;53432:4;53438:9;53415:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53401:48;;;;;;53353:108;53480:23;53495:7;53480:14;:23::i;:::-;53473:30;;;;52977:534;;;;:::o;54471:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;57390:143::-;38424:12;:10;:12::i;:::-;38413:23;;:7;:5;:7::i;:::-;:23;;;38405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57511:14:::1;57487:16;:21;57504:3;57487:21;;;;;;;;;;;;;;;:38;;;;57390:143:::0;;:::o;47488:164::-;47585:4;47609:18;:25;47628:5;47609:25;;;;;;;;;;;;;;;:35;47635:8;47609:35;;;;;;;;;;;;;;;;;;;;;;;;;47602:42;;47488:164;;;;:::o;38612:201::-;38424:12;:10;:12::i;:::-;38413:23;;:7;:5;:7::i;:::-;:23;;;38405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38721:1:::1;38701:22;;:8;:22;;::::0;38693:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38777:28;38796:8;38777:18;:28::i;:::-;38612:201:::0;:::o;54648:43::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42953:157::-;43038:4;43077:25;43062:40;;;:11;:40;;;;43055:47;;42953:157;;;:::o;48818:127::-;48883:4;48935:1;48907:30;;:7;:16;48915:7;48907:16;;;;;;;;;;;;;;;;;;;;;:30;;;;48900:37;;48818:127;;;:::o;37799:98::-;37852:7;37879:10;37872:17;;37799:98;:::o;51224:174::-;51326:2;51299:15;:24;51315:7;51299:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;51382:7;51378:2;51344:46;;51353:23;51368:7;51353:14;:23::i;:::-;51344:46;;;;;;;;;;;;51224:174;;:::o;48955:348::-;49048:4;49073:16;49081:7;49073;:16::i;:::-;49065:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;49149:13;49165:23;49180:7;49165:14;:23::i;:::-;49149:39;;49218:5;49207:16;;:7;:16;;;:52;;;;49227:32;49244:5;49251:7;49227:16;:32::i;:::-;49207:52;:87;;;;49287:7;49263:31;;:20;49275:7;49263:11;:20::i;:::-;:31;;;49207:87;49199:96;;;48955:348;;;;:::o;50641:573::-;50800:4;50773:31;;:23;50788:7;50773:14;:23::i;:::-;:31;;;50765:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;50879:1;50865:16;;:2;:16;;;50857:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;50935:39;50956:4;50962:2;50966:7;50935:20;:39::i;:::-;50987:29;51004:1;51008:7;50987:8;:29::i;:::-;51048:1;51029:9;:15;51039:4;51029:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;51077:1;51060:9;:13;51070:2;51060:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;51108:2;51089:7;:16;51097:7;51089:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;51147:7;51143:2;51128:27;;51137:4;51128:27;;;;;;;;;;;;51168:38;51188:4;51194:2;51198:7;51168:19;:38::i;:::-;50641:573;;;:::o;27931:190::-;28056:4;28109;28080:25;28093:5;28100:4;28080:12;:25::i;:::-;:33;28073:40;;27931:190;;;;;:::o;32174:534::-;32230:13;32271:1;32262:5;:10;32258:53;;32289:10;;;;;;;;;;;;;;;;;;;;;32258:53;32321:12;32336:5;32321:20;;32352:14;32377:78;32392:1;32384:4;:9;32377:78;;32410:8;;;;;:::i;:::-;;;;32441:2;32433:10;;;;;:::i;:::-;;;32377:78;;;32465:19;32497:6;32487:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32465:39;;32515:154;32531:1;32522:5;:10;32515:154;;32559:1;32549:11;;;;;:::i;:::-;;;32626:2;32618:5;:10;;;;:::i;:::-;32605:2;:24;;;;:::i;:::-;32592:39;;32575:6;32582;32575:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;32655:2;32646:11;;;;;:::i;:::-;;;32515:154;;;32693:6;32679:21;;;;;32174:534;;;;:::o;49311:110::-;49387:26;49397:2;49401:7;49387:26;;;;;;;;;;;;:9;:26::i;:::-;49311:110;;:::o;38821:191::-;38895:16;38914:6;;;;;;;;;;;38895:25;;38940:8;38931:6;;:17;;;;;;;;;;;;;;;;;;38995:8;38964:40;;38985:8;38964:40;;;;;;;;;;;;38884:128;38821:191;:::o;51408:315::-;51563:8;51554:17;;:5;:17;;;51546:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;51650:8;51612:18;:25;51631:5;51612:25;;;;;;;;;;;;;;;:35;51638:8;51612:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;51696:8;51674:41;;51689:5;51674:41;;;51706:8;51674:41;;;;;;:::i;:::-;;;;;;;;51408:315;;;:::o;48493:::-;48650:28;48660:4;48666:2;48670:7;48650:9;:28::i;:::-;48697:48;48720:4;48726:2;48730:7;48739:5;48697:22;:48::i;:::-;48689:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;48493:315;;;;:::o;57265:117::-;57325:13;57358:16;57351:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57265:117;:::o;46223:334::-;46296:13;46330:16;46338:7;46330;:16::i;:::-;46322:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;46411:21;46435:10;:8;:10::i;:::-;46411:34;;46487:1;46469:7;46463:21;:25;:86;;;;;;;;;;;;;;;;;46515:7;46524:18;:7;:16;:18::i;:::-;46498:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46463:86;46456:93;;;46223:334;;;:::o;52540:126::-;;;;:::o;52674:125::-;;;;:::o;28341:296::-;28424:7;28444:20;28467:4;28444:27;;28487:9;28482:118;28506:5;:12;28502:1;:16;28482:118;;;28555:33;28565:12;28579:5;28585:1;28579:8;;;;;;;;:::i;:::-;;;;;;;;28555:9;:33::i;:::-;28540:48;;28520:3;;;;;:::i;:::-;;;;28482:118;;;;28617:12;28610:19;;;28341:296;;;;:::o;49431:321::-;49561:18;49567:2;49571:7;49561:5;:18::i;:::-;49612:54;49643:1;49647:2;49651:7;49660:5;49612:22;:54::i;:::-;49590:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;49431:321;;;:::o;51733:799::-;51888:4;51909:15;:2;:13;;;:15::i;:::-;51905:620;;;51961:2;51945:36;;;51982:12;:10;:12::i;:::-;51996:4;52002:7;52011:5;51945:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;51941:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52204:1;52187:6;:13;:18;52183:272;;52230:60;;;;;;;;;;:::i;:::-;;;;;;;;52183:272;52405:6;52399:13;52390:6;52386:2;52382:15;52375:38;51941:529;52078:41;;;52068:51;;;:6;:51;;;;52061:58;;;;;51905:620;52509:4;52502:11;;51733:799;;;;;;;:::o;31669:149::-;31732:7;31763:1;31759;:5;:51;;31790:20;31805:1;31808;31790:14;:20::i;:::-;31759:51;;;31767:20;31782:1;31785;31767:14;:20::i;:::-;31759:51;31752:58;;31669:149;;;;:::o;49762:439::-;49856:1;49842:16;;:2;:16;;;49834:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;49915:16;49923:7;49915;:16::i;:::-;49914:17;49906:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;49977:45;50006:1;50010:2;50014:7;49977:20;:45::i;:::-;50052:1;50035:9;:13;50045:2;50035:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;50083:2;50064:7;:16;50072:7;50064:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;50128:7;50124:2;50103:33;;50120:1;50103:33;;;;;;;;;;;;50149:44;50177:1;50181:2;50185:7;50149:19;:44::i;:::-;49762:439;;:::o;39071:117::-;39131:4;39179:1;39157:7;:19;;;:23;39150:30;;39071:117;;;:::o;31826:226::-;31894:13;31959:1;31953:4;31946:15;31988:1;31982:4;31975:15;32029:4;32023;32013:21;32004:30;;31826:226;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:619::-;5015:6;5023;5031;5080:2;5068:9;5059:7;5055:23;5051:32;5048:119;;;5086:79;;:::i;:::-;5048:119;5206:1;5231:53;5276:7;5267:6;5256:9;5252:22;5231:53;:::i;:::-;5221:63;;5177:117;5333:2;5359:53;5404:7;5395:6;5384:9;5380:22;5359:53;:::i;:::-;5349:63;;5304:118;5461:2;5487:53;5532:7;5523:6;5512:9;5508:22;5487:53;:::i;:::-;5477:63;;5432:118;4938:619;;;;;:::o;5563:117::-;5672:1;5669;5662:12;5686:117;5795:1;5792;5785:12;5809:180;5857:77;5854:1;5847:88;5954:4;5951:1;5944:15;5978:4;5975:1;5968:15;5995:281;6078:27;6100:4;6078:27;:::i;:::-;6070:6;6066:40;6208:6;6196:10;6193:22;6172:18;6160:10;6157:34;6154:62;6151:88;;;6219:18;;:::i;:::-;6151:88;6259:10;6255:2;6248:22;6038:238;5995:281;;:::o;6282:129::-;6316:6;6343:20;;:::i;:::-;6333:30;;6372:33;6400:4;6392:6;6372:33;:::i;:::-;6282:129;;;:::o;6417:308::-;6479:4;6569:18;6561:6;6558:30;6555:56;;;6591:18;;:::i;:::-;6555:56;6629:29;6651:6;6629:29;:::i;:::-;6621:37;;6713:4;6707;6703:15;6695:23;;6417:308;;;:::o;6731:154::-;6815:6;6810:3;6805;6792:30;6877:1;6868:6;6863:3;6859:16;6852:27;6731:154;;;:::o;6891:412::-;6969:5;6994:66;7010:49;7052:6;7010:49;:::i;:::-;6994:66;:::i;:::-;6985:75;;7083:6;7076:5;7069:21;7121:4;7114:5;7110:16;7159:3;7150:6;7145:3;7141:16;7138:25;7135:112;;;7166:79;;:::i;:::-;7135:112;7256:41;7290:6;7285:3;7280;7256:41;:::i;:::-;6975:328;6891:412;;;;;:::o;7323:340::-;7379:5;7428:3;7421:4;7413:6;7409:17;7405:27;7395:122;;7436:79;;:::i;:::-;7395:122;7553:6;7540:20;7578:79;7653:3;7645:6;7638:4;7630:6;7626:17;7578:79;:::i;:::-;7569:88;;7385:278;7323:340;;;;:::o;7669:509::-;7738:6;7787:2;7775:9;7766:7;7762:23;7758:32;7755:119;;;7793:79;;:::i;:::-;7755:119;7941:1;7930:9;7926:17;7913:31;7971:18;7963:6;7960:30;7957:117;;;7993:79;;:::i;:::-;7957:117;8098:63;8153:7;8144:6;8133:9;8129:22;8098:63;:::i;:::-;8088:73;;7884:287;7669:509;;;;:::o;8184:311::-;8261:4;8351:18;8343:6;8340:30;8337:56;;;8373:18;;:::i;:::-;8337:56;8423:4;8415:6;8411:17;8403:25;;8483:4;8477;8473:15;8465:23;;8184:311;;;:::o;8501:117::-;8610:1;8607;8600:12;8624:77;8661:7;8690:5;8679:16;;8624:77;;;:::o;8707:122::-;8780:24;8798:5;8780:24;:::i;:::-;8773:5;8770:35;8760:63;;8819:1;8816;8809:12;8760:63;8707:122;:::o;8835:139::-;8881:5;8919:6;8906:20;8897:29;;8935:33;8962:5;8935:33;:::i;:::-;8835:139;;;;:::o;8997:710::-;9093:5;9118:81;9134:64;9191:6;9134:64;:::i;:::-;9118:81;:::i;:::-;9109:90;;9219:5;9248:6;9241:5;9234:21;9282:4;9275:5;9271:16;9264:23;;9335:4;9327:6;9323:17;9315:6;9311:30;9364:3;9356:6;9353:15;9350:122;;;9383:79;;:::i;:::-;9350:122;9498:6;9481:220;9515:6;9510:3;9507:15;9481:220;;;9590:3;9619:37;9652:3;9640:10;9619:37;:::i;:::-;9614:3;9607:50;9686:4;9681:3;9677:14;9670:21;;9557:144;9541:4;9536:3;9532:14;9525:21;;9481:220;;;9485:21;9099:608;;8997:710;;;;;:::o;9730:370::-;9801:5;9850:3;9843:4;9835:6;9831:17;9827:27;9817:122;;9858:79;;:::i;:::-;9817:122;9975:6;9962:20;10000:94;10090:3;10082:6;10075:4;10067:6;10063:17;10000:94;:::i;:::-;9991:103;;9807:293;9730:370;;;;:::o;10106:86::-;10141:7;10181:4;10174:5;10170:16;10159:27;;10106:86;;;:::o;10198:118::-;10269:22;10285:5;10269:22;:::i;:::-;10262:5;10259:33;10249:61;;10306:1;10303;10296:12;10249:61;10198:118;:::o;10322:135::-;10366:5;10404:6;10391:20;10382:29;;10420:31;10445:5;10420:31;:::i;:::-;10322:135;;;;:::o;10463:825::-;10563:6;10571;10579;10628:2;10616:9;10607:7;10603:23;10599:32;10596:119;;;10634:79;;:::i;:::-;10596:119;10782:1;10771:9;10767:17;10754:31;10812:18;10804:6;10801:30;10798:117;;;10834:79;;:::i;:::-;10798:117;10939:78;11009:7;11000:6;10989:9;10985:22;10939:78;:::i;:::-;10929:88;;10725:302;11066:2;11092:53;11137:7;11128:6;11117:9;11113:22;11092:53;:::i;:::-;11082:63;;11037:118;11194:2;11220:51;11263:7;11254:6;11243:9;11239:22;11220:51;:::i;:::-;11210:61;;11165:116;10463:825;;;;;:::o;11294:329::-;11353:6;11402:2;11390:9;11381:7;11377:23;11373:32;11370:119;;;11408:79;;:::i;:::-;11370:119;11528:1;11553:53;11598:7;11589:6;11578:9;11574:22;11553:53;:::i;:::-;11543:63;;11499:117;11294:329;;;;:::o;11629:118::-;11716:24;11734:5;11716:24;:::i;:::-;11711:3;11704:37;11629:118;;:::o;11753:222::-;11846:4;11884:2;11873:9;11869:18;11861:26;;11897:71;11965:1;11954:9;11950:17;11941:6;11897:71;:::i;:::-;11753:222;;;;:::o;11981:116::-;12051:21;12066:5;12051:21;:::i;:::-;12044:5;12041:32;12031:60;;12087:1;12084;12077:12;12031:60;11981:116;:::o;12103:133::-;12146:5;12184:6;12171:20;12162:29;;12200:30;12224:5;12200:30;:::i;:::-;12103:133;;;;:::o;12242:468::-;12307:6;12315;12364:2;12352:9;12343:7;12339:23;12335:32;12332:119;;;12370:79;;:::i;:::-;12332:119;12490:1;12515:53;12560:7;12551:6;12540:9;12536:22;12515:53;:::i;:::-;12505:63;;12461:117;12617:2;12643:50;12685:7;12676:6;12665:9;12661:22;12643:50;:::i;:::-;12633:60;;12588:115;12242:468;;;;;:::o;12716:307::-;12777:4;12867:18;12859:6;12856:30;12853:56;;;12889:18;;:::i;:::-;12853:56;12927:29;12949:6;12927:29;:::i;:::-;12919:37;;13011:4;13005;13001:15;12993:23;;12716:307;;;:::o;13029:410::-;13106:5;13131:65;13147:48;13188:6;13147:48;:::i;:::-;13131:65;:::i;:::-;13122:74;;13219:6;13212:5;13205:21;13257:4;13250:5;13246:16;13295:3;13286:6;13281:3;13277:16;13274:25;13271:112;;;13302:79;;:::i;:::-;13271:112;13392:41;13426:6;13421:3;13416;13392:41;:::i;:::-;13112:327;13029:410;;;;;:::o;13458:338::-;13513:5;13562:3;13555:4;13547:6;13543:17;13539:27;13529:122;;13570:79;;:::i;:::-;13529:122;13687:6;13674:20;13712:78;13786:3;13778:6;13771:4;13763:6;13759:17;13712:78;:::i;:::-;13703:87;;13519:277;13458:338;;;;:::o;13802:943::-;13897:6;13905;13913;13921;13970:3;13958:9;13949:7;13945:23;13941:33;13938:120;;;13977:79;;:::i;:::-;13938:120;14097:1;14122:53;14167:7;14158:6;14147:9;14143:22;14122:53;:::i;:::-;14112:63;;14068:117;14224:2;14250:53;14295:7;14286:6;14275:9;14271:22;14250:53;:::i;:::-;14240:63;;14195:118;14352:2;14378:53;14423:7;14414:6;14403:9;14399:22;14378:53;:::i;:::-;14368:63;;14323:118;14508:2;14497:9;14493:18;14480:32;14539:18;14531:6;14528:30;14525:117;;;14561:79;;:::i;:::-;14525:117;14666:62;14720:7;14711:6;14700:9;14696:22;14666:62;:::i;:::-;14656:72;;14451:287;13802:943;;;;;;;:::o;14751:325::-;14808:6;14857:2;14845:9;14836:7;14832:23;14828:32;14825:119;;;14863:79;;:::i;:::-;14825:119;14983:1;15008:51;15051:7;15042:6;15031:9;15027:22;15008:51;:::i;:::-;14998:61;;14954:115;14751:325;;;;:::o;15082:89::-;15118:7;15158:6;15151:5;15147:18;15136:29;;15082:89;;;:::o;15177:115::-;15262:23;15279:5;15262:23;:::i;:::-;15257:3;15250:36;15177:115;;:::o;15298:218::-;15389:4;15427:2;15416:9;15412:18;15404:26;;15440:69;15506:1;15495:9;15491:17;15482:6;15440:69;:::i;:::-;15298:218;;;;:::o;15522:470::-;15588:6;15596;15645:2;15633:9;15624:7;15620:23;15616:32;15613:119;;;15651:79;;:::i;:::-;15613:119;15771:1;15796:53;15841:7;15832:6;15821:9;15817:22;15796:53;:::i;:::-;15786:63;;15742:117;15898:2;15924:51;15967:7;15958:6;15947:9;15943:22;15924:51;:::i;:::-;15914:61;;15869:116;15522:470;;;;;:::o;15998:474::-;16066:6;16074;16123:2;16111:9;16102:7;16098:23;16094:32;16091:119;;;16129:79;;:::i;:::-;16091:119;16249:1;16274:53;16319:7;16310:6;16299:9;16295:22;16274:53;:::i;:::-;16264:63;;16220:117;16376:2;16402:53;16447:7;16438:6;16427:9;16423:22;16402:53;:::i;:::-;16392:63;;16347:118;15998:474;;;;;:::o;16478:180::-;16526:77;16523:1;16516:88;16623:4;16620:1;16613:15;16647:4;16644:1;16637:15;16664:320;16708:6;16745:1;16739:4;16735:12;16725:22;;16792:1;16786:4;16782:12;16813:18;16803:81;;16869:4;16861:6;16857:17;16847:27;;16803:81;16931:2;16923:6;16920:14;16900:18;16897:38;16894:84;;16950:18;;:::i;:::-;16894:84;16715:269;16664:320;;;:::o;16990:231::-;17130:34;17126:1;17118:6;17114:14;17107:58;17199:14;17194:2;17186:6;17182:15;17175:39;16990:231;:::o;17227:366::-;17369:3;17390:67;17454:2;17449:3;17390:67;:::i;:::-;17383:74;;17466:93;17555:3;17466:93;:::i;:::-;17584:2;17579:3;17575:12;17568:19;;17227:366;;;:::o;17599:419::-;17765:4;17803:2;17792:9;17788:18;17780:26;;17852:9;17846:4;17842:20;17838:1;17827:9;17823:17;17816:47;17880:131;18006:4;17880:131;:::i;:::-;17872:139;;17599:419;;;:::o;18024:220::-;18164:34;18160:1;18152:6;18148:14;18141:58;18233:3;18228:2;18220:6;18216:15;18209:28;18024:220;:::o;18250:366::-;18392:3;18413:67;18477:2;18472:3;18413:67;:::i;:::-;18406:74;;18489:93;18578:3;18489:93;:::i;:::-;18607:2;18602:3;18598:12;18591:19;;18250:366;;;:::o;18622:419::-;18788:4;18826:2;18815:9;18811:18;18803:26;;18875:9;18869:4;18865:20;18861:1;18850:9;18846:17;18839:47;18903:131;19029:4;18903:131;:::i;:::-;18895:139;;18622:419;;;:::o;19047:243::-;19187:34;19183:1;19175:6;19171:14;19164:58;19256:26;19251:2;19243:6;19239:15;19232:51;19047:243;:::o;19296:366::-;19438:3;19459:67;19523:2;19518:3;19459:67;:::i;:::-;19452:74;;19535:93;19624:3;19535:93;:::i;:::-;19653:2;19648:3;19644:12;19637:19;;19296:366;;;:::o;19668:419::-;19834:4;19872:2;19861:9;19857:18;19849:26;;19921:9;19915:4;19911:20;19907:1;19896:9;19892:17;19885:47;19949:131;20075:4;19949:131;:::i;:::-;19941:139;;19668:419;;;:::o;20093:236::-;20233:34;20229:1;20221:6;20217:14;20210:58;20302:19;20297:2;20289:6;20285:15;20278:44;20093:236;:::o;20335:366::-;20477:3;20498:67;20562:2;20557:3;20498:67;:::i;:::-;20491:74;;20574:93;20663:3;20574:93;:::i;:::-;20692:2;20687:3;20683:12;20676:19;;20335:366;;;:::o;20707:419::-;20873:4;20911:2;20900:9;20896:18;20888:26;;20960:9;20954:4;20950:20;20946:1;20935:9;20931:17;20924:47;20988:131;21114:4;20988:131;:::i;:::-;20980:139;;20707:419;;;:::o;21132:182::-;21272:34;21268:1;21260:6;21256:14;21249:58;21132:182;:::o;21320:366::-;21462:3;21483:67;21547:2;21542:3;21483:67;:::i;:::-;21476:74;;21559:93;21648:3;21559:93;:::i;:::-;21677:2;21672:3;21668:12;21661:19;;21320:366;;;:::o;21692:419::-;21858:4;21896:2;21885:9;21881:18;21873:26;;21945:9;21939:4;21935:20;21931:1;21920:9;21916:17;21909:47;21973:131;22099:4;21973:131;:::i;:::-;21965:139;;21692:419;;;:::o;22117:141::-;22166:4;22189:3;22181:11;;22212:3;22209:1;22202:14;22246:4;22243:1;22233:18;22225:26;;22117:141;;;:::o;22264:93::-;22301:6;22348:2;22343;22336:5;22332:14;22328:23;22318:33;;22264:93;;;:::o;22363:107::-;22407:8;22457:5;22451:4;22447:16;22426:37;;22363:107;;;;:::o;22476:393::-;22545:6;22595:1;22583:10;22579:18;22618:97;22648:66;22637:9;22618:97;:::i;:::-;22736:39;22766:8;22755:9;22736:39;:::i;:::-;22724:51;;22808:4;22804:9;22797:5;22793:21;22784:30;;22857:4;22847:8;22843:19;22836:5;22833:30;22823:40;;22552:317;;22476:393;;;;;:::o;22875:60::-;22903:3;22924:5;22917:12;;22875:60;;;:::o;22941:142::-;22991:9;23024:53;23042:34;23051:24;23069:5;23051:24;:::i;:::-;23042:34;:::i;:::-;23024:53;:::i;:::-;23011:66;;22941:142;;;:::o;23089:75::-;23132:3;23153:5;23146:12;;23089:75;;;:::o;23170:269::-;23280:39;23311:7;23280:39;:::i;:::-;23341:91;23390:41;23414:16;23390:41;:::i;:::-;23382:6;23375:4;23369:11;23341:91;:::i;:::-;23335:4;23328:105;23246:193;23170:269;;;:::o;23445:73::-;23490:3;23445:73;:::o;23524:189::-;23601:32;;:::i;:::-;23642:65;23700:6;23692;23686:4;23642:65;:::i;:::-;23577:136;23524:189;;:::o;23719:186::-;23779:120;23796:3;23789:5;23786:14;23779:120;;;23850:39;23887:1;23880:5;23850:39;:::i;:::-;23823:1;23816:5;23812:13;23803:22;;23779:120;;;23719:186;;:::o;23911:543::-;24012:2;24007:3;24004:11;24001:446;;;24046:38;24078:5;24046:38;:::i;:::-;24130:29;24148:10;24130:29;:::i;:::-;24120:8;24116:44;24313:2;24301:10;24298:18;24295:49;;;24334:8;24319:23;;24295:49;24357:80;24413:22;24431:3;24413:22;:::i;:::-;24403:8;24399:37;24386:11;24357:80;:::i;:::-;24016:431;;24001:446;23911:543;;;:::o;24460:117::-;24514:8;24564:5;24558:4;24554:16;24533:37;;24460:117;;;;:::o;24583:169::-;24627:6;24660:51;24708:1;24704:6;24696:5;24693:1;24689:13;24660:51;:::i;:::-;24656:56;24741:4;24735;24731:15;24721:25;;24634:118;24583:169;;;;:::o;24757:295::-;24833:4;24979:29;25004:3;24998:4;24979:29;:::i;:::-;24971:37;;25041:3;25038:1;25034:11;25028:4;25025:21;25017:29;;24757:295;;;;:::o;25057:1395::-;25174:37;25207:3;25174:37;:::i;:::-;25276:18;25268:6;25265:30;25262:56;;;25298:18;;:::i;:::-;25262:56;25342:38;25374:4;25368:11;25342:38;:::i;:::-;25427:67;25487:6;25479;25473:4;25427:67;:::i;:::-;25521:1;25545:4;25532:17;;25577:2;25569:6;25566:14;25594:1;25589:618;;;;26251:1;26268:6;26265:77;;;26317:9;26312:3;26308:19;26302:26;26293:35;;26265:77;26368:67;26428:6;26421:5;26368:67;:::i;:::-;26362:4;26355:81;26224:222;25559:887;;25589:618;25641:4;25637:9;25629:6;25625:22;25675:37;25707:4;25675:37;:::i;:::-;25734:1;25748:208;25762:7;25759:1;25756:14;25748:208;;;25841:9;25836:3;25832:19;25826:26;25818:6;25811:42;25892:1;25884:6;25880:14;25870:24;;25939:2;25928:9;25924:18;25911:31;;25785:4;25782:1;25778:12;25773:17;;25748:208;;;25984:6;25975:7;25972:19;25969:179;;;26042:9;26037:3;26033:19;26027:26;26085:48;26127:4;26119:6;26115:17;26104:9;26085:48;:::i;:::-;26077:6;26070:64;25992:156;25969:179;26194:1;26190;26182:6;26178:14;26174:22;26168:4;26161:36;25596:611;;;25559:887;;25149:1303;;;25057:1395;;:::o;26458:94::-;26491:8;26539:5;26535:2;26531:14;26510:35;;26458:94;;;:::o;26558:::-;26597:7;26626:20;26640:5;26626:20;:::i;:::-;26615:31;;26558:94;;;:::o;26658:100::-;26697:7;26726:26;26746:5;26726:26;:::i;:::-;26715:37;;26658:100;;;:::o;26764:157::-;26869:45;26889:24;26907:5;26889:24;:::i;:::-;26869:45;:::i;:::-;26864:3;26857:58;26764:157;;:::o;26927:79::-;26966:7;26995:5;26984:16;;26927:79;;;:::o;27012:157::-;27117:45;27137:24;27155:5;27137:24;:::i;:::-;27117:45;:::i;:::-;27112:3;27105:58;27012:157;;:::o;27175:397::-;27315:3;27330:75;27401:3;27392:6;27330:75;:::i;:::-;27430:2;27425:3;27421:12;27414:19;;27443:75;27514:3;27505:6;27443:75;:::i;:::-;27543:2;27538:3;27534:12;27527:19;;27563:3;27556:10;;27175:397;;;;;:::o;27578:240::-;27718:34;27714:1;27706:6;27702:14;27695:58;27787:23;27782:2;27774:6;27770:15;27763:48;27578:240;:::o;27824:366::-;27966:3;27987:67;28051:2;28046:3;27987:67;:::i;:::-;27980:74;;28063:93;28152:3;28063:93;:::i;:::-;28181:2;28176:3;28172:12;28165:19;;27824:366;;;:::o;28196:419::-;28362:4;28400:2;28389:9;28385:18;28377:26;;28449:9;28443:4;28439:20;28435:1;28424:9;28420:17;28413:47;28477:131;28603:4;28477:131;:::i;:::-;28469:139;;28196:419;;;:::o;28621:307::-;28761:34;28757:1;28749:6;28745:14;28738:58;28830:34;28825:2;28817:6;28813:15;28806:59;28899:21;28894:2;28886:6;28882:15;28875:46;28621:307;:::o;28934:366::-;29076:3;29097:67;29161:2;29156:3;29097:67;:::i;:::-;29090:74;;29173:93;29262:3;29173:93;:::i;:::-;29291:2;29286:3;29282:12;29275:19;;28934:366;;;:::o;29306:419::-;29472:4;29510:2;29499:9;29495:18;29487:26;;29559:9;29553:4;29549:20;29545:1;29534:9;29530:17;29523:47;29587:131;29713:4;29587:131;:::i;:::-;29579:139;;29306:419;;;:::o;29731:237::-;29871:34;29867:1;29859:6;29855:14;29848:58;29940:20;29935:2;29927:6;29923:15;29916:45;29731:237;:::o;29974:366::-;30116:3;30137:67;30201:2;30196:3;30137:67;:::i;:::-;30130:74;;30213:93;30302:3;30213:93;:::i;:::-;30331:2;30326:3;30322:12;30315:19;;29974:366;;;:::o;30346:419::-;30512:4;30550:2;30539:9;30535:18;30527:26;;30599:9;30593:4;30589:20;30585:1;30574:9;30570:17;30563:47;30627:131;30753:4;30627:131;:::i;:::-;30619:139;;30346:419;;;:::o;30771:175::-;30911:27;30907:1;30899:6;30895:14;30888:51;30771:175;:::o;30952:366::-;31094:3;31115:67;31179:2;31174:3;31115:67;:::i;:::-;31108:74;;31191:93;31280:3;31191:93;:::i;:::-;31309:2;31304:3;31300:12;31293:19;;30952:366;;;:::o;31324:419::-;31490:4;31528:2;31517:9;31513:18;31505:26;;31577:9;31571:4;31567:20;31563:1;31552:9;31548:17;31541:47;31605:131;31731:4;31605:131;:::i;:::-;31597:139;;31324:419;;;:::o;31749:178::-;31889:30;31885:1;31877:6;31873:14;31866:54;31749:178;:::o;31933:366::-;32075:3;32096:67;32160:2;32155:3;32096:67;:::i;:::-;32089:74;;32172:93;32261:3;32172:93;:::i;:::-;32290:2;32285:3;32281:12;32274:19;;31933:366;;;:::o;32305:419::-;32471:4;32509:2;32498:9;32494:18;32486:26;;32558:9;32552:4;32548:20;32544:1;32533:9;32529:17;32522:47;32586:131;32712:4;32586:131;:::i;:::-;32578:139;;32305:419;;;:::o;32730:180::-;32778:77;32775:1;32768:88;32875:4;32872:1;32865:15;32899:4;32896:1;32889:15;32916:167;32953:3;32976:22;32992:5;32976:22;:::i;:::-;32967:31;;33020:4;33013:5;33010:15;33007:41;;33028:18;;:::i;:::-;33007:41;33075:1;33068:5;33064:13;33057:20;;32916:167;;;:::o;33089:212::-;33229:34;33225:1;33217:6;33213:14;33206:58;33294:3;33289:2;33281:6;33277:15;33270:28;33089:212;:::o;33303:350::-;33445:3;33462:67;33526:2;33521:3;33462:67;:::i;:::-;33455:74;;33534:93;33623:3;33534:93;:::i;:::-;33648:2;33643:3;33639:12;33632:19;;33303:350;;;:::o;33655:403::-;33821:4;33855:2;33844:9;33840:18;33832:26;;33900:9;33894:4;33890:20;33886:1;33875:9;33871:17;33864:47;33924:131;34050:4;33924:131;:::i;:::-;33916:139;;33655:403;;;:::o;34060:168::-;34099:4;34115:19;34132:1;34115:19;:::i;:::-;34110:24;;34144:19;34161:1;34144:19;:::i;:::-;34139:24;;34178:1;34175;34172:8;34169:34;;;34183:18;;:::i;:::-;34169:34;34224:1;34221;34217:9;34209:17;;34060:168;;;;:::o;34230:140::-;34332:11;34365:3;34350:18;;34230:140;;;;:::o;34392:794::-;34495:3;34528:5;34522:12;34553:36;34579:9;34553:36;:::i;:::-;34601:89;34683:6;34678:3;34601:89;:::i;:::-;34594:96;;34717:1;34706:9;34702:17;34729:1;34724:150;;;;34884:1;34879:305;;;;34695:489;;34724:150;34800:4;34796:9;34785;34781:25;34776:3;34769:38;34858:6;34851:14;34844:22;34836:6;34832:35;34827:3;34823:45;34816:52;;34724:150;;34879:305;34938:38;34970:5;34938:38;:::i;:::-;34994:1;35004:142;35018:6;35015:1;35012:13;35004:142;;;35088:7;35082:14;35078:1;35073:3;35069:11;35062:35;35134:1;35125:7;35121:15;35110:26;;35040:4;35037:1;35033:12;35028:17;;35004:142;;;35171:6;35166:3;35162:16;35155:23;;34886:298;;34695:489;;34499:687;;34392:794;;;;:::o;35188:357::-;35294:3;35318:39;35351:5;35318:39;:::i;:::-;35369:89;35451:6;35446:3;35369:89;:::i;:::-;35362:96;;35463:52;35508:6;35503:3;35496:4;35489:5;35485:16;35463:52;:::i;:::-;35536:6;35531:3;35527:16;35520:23;;35298:247;35188:357;;;;:::o;35547:413::-;35724:3;35742:92;35830:3;35821:6;35742:92;:::i;:::-;35735:99;;35847:95;35938:3;35929:6;35847:95;:::i;:::-;35840:102;;35955:3;35948:10;;35547:413;;;;;:::o;35962:261::-;36001:7;36020:19;36037:1;36020:19;:::i;:::-;36015:24;;36049:19;36066:1;36049:19;:::i;:::-;36044:24;;36168:1;36160:6;36156:14;36153:1;36150:21;36145:1;36138:9;36131:17;36127:45;36124:71;;;36175:18;;:::i;:::-;36124:71;36219:1;36216;36212:9;36201:20;;35962:261;;;;:::o;36225:218::-;36264:3;36279:19;36296:1;36279:19;:::i;:::-;36274:24;;36308:19;36325:1;36308:19;:::i;:::-;36303:24;;36393:1;36385:6;36381:14;36378:1;36375:21;36372:47;;;36399:18;;:::i;:::-;36372:47;36439:1;36436;36432:9;36425:16;;36225:218;;;;:::o;36445:216::-;36581:34;36577:1;36569:6;36565:14;36558:58;36646:11;36641:2;36633:6;36629:15;36622:36;36445:216;:::o;36663:350::-;36805:3;36822:67;36886:2;36881:3;36822:67;:::i;:::-;36815:74;;36894:93;36983:3;36894:93;:::i;:::-;37008:2;37003:3;36999:12;36992:19;;36663:350;;;:::o;37015:403::-;37181:4;37215:2;37204:9;37200:18;37192:26;;37260:9;37254:4;37250:20;37246:1;37235:9;37231:17;37224:47;37284:131;37410:4;37284:131;:::i;:::-;37276:139;;37015:403;;;:::o;37420:217::-;37556:34;37552:1;37544:6;37540:14;37533:58;37621:12;37616:2;37608:6;37604:15;37597:37;37420:217;:::o;37639:350::-;37781:3;37798:67;37862:2;37857:3;37798:67;:::i;:::-;37791:74;;37870:93;37959:3;37870:93;:::i;:::-;37984:2;37979:3;37975:12;37968:19;;37639:350;;;:::o;37991:403::-;38157:4;38191:2;38180:9;38176:18;38168:26;;38236:9;38230:4;38226:20;38222:1;38211:9;38207:17;38200:47;38260:131;38386:4;38260:131;:::i;:::-;38252:139;;37991:403;;;:::o;38396:224::-;38532:34;38528:1;38520:6;38516:14;38509:58;38597:19;38592:2;38584:6;38580:15;38573:44;38396:224;:::o;38622:350::-;38764:3;38781:67;38845:2;38840:3;38781:67;:::i;:::-;38774:74;;38853:93;38942:3;38853:93;:::i;:::-;38967:2;38962:3;38958:12;38951:19;;38622:350;;;:::o;38974:403::-;39140:4;39174:2;39163:9;39159:18;39151:26;;39219:9;39213:4;39209:20;39205:1;39194:9;39190:17;39183:47;39243:131;39369:4;39243:131;:::i;:::-;39235:139;;38974:403;;;:::o;39379:419::-;39559:3;39577:95;39668:3;39659:6;39577:95;:::i;:::-;39570:102;;39685:95;39776:3;39767:6;39685:95;:::i;:::-;39678:102;;39793:3;39786:10;;39379:419;;;;;:::o;39800:213::-;39936:34;39932:1;39924:6;39920:14;39913:58;40001:8;39996:2;39988:6;39984:15;39977:33;39800:213;:::o;40015:350::-;40157:3;40174:67;40238:2;40233:3;40174:67;:::i;:::-;40167:74;;40246:93;40335:3;40246:93;:::i;:::-;40360:2;40355:3;40351:12;40344:19;;40015:350;;;:::o;40367:403::-;40533:4;40567:2;40556:9;40552:18;40544:26;;40612:9;40606:4;40602:20;40598:1;40587:9;40583:17;40576:47;40636:131;40762:4;40636:131;:::i;:::-;40628:139;;40367:403;;;:::o;40772:219::-;40908:34;40904:1;40896:6;40892:14;40885:58;40973:14;40968:2;40960:6;40956:15;40949:39;40772:219;:::o;40993:350::-;41135:3;41152:67;41216:2;41211:3;41152:67;:::i;:::-;41145:74;;41224:93;41313:3;41224:93;:::i;:::-;41338:2;41333:3;41329:12;41322:19;;40993:350;;;:::o;41345:403::-;41511:4;41545:2;41534:9;41530:18;41522:26;;41590:9;41584:4;41580:20;41576:1;41565:9;41561:17;41554:47;41614:131;41740:4;41614:131;:::i;:::-;41606:139;;41345:403;;;:::o;41750:212::-;41886:34;41882:1;41874:6;41870:14;41863:58;41951:7;41946:2;41938:6;41934:15;41927:32;41750:212;:::o;41964:350::-;42106:3;42123:67;42187:2;42182:3;42123:67;:::i;:::-;42116:74;;42195:93;42284:3;42195:93;:::i;:::-;42309:2;42304:3;42300:12;42293:19;;41964:350;;;:::o;42316:403::-;42482:4;42516:2;42505:9;42501:18;42493:26;;42561:9;42555:4;42551:20;42547:1;42536:9;42532:17;42525:47;42585:131;42711:4;42585:131;:::i;:::-;42577:139;;42316:403;;;:::o;42721:211::-;42857:34;42853:1;42845:6;42841:14;42834:58;42922:6;42917:2;42909:6;42905:15;42898:31;42721:211;:::o;42934:350::-;43076:3;43093:67;43157:2;43152:3;43093:67;:::i;:::-;43086:74;;43165:93;43254:3;43165:93;:::i;:::-;43279:2;43274:3;43270:12;43263:19;;42934:350;;;:::o;43286:403::-;43452:4;43486:2;43475:9;43471:18;43463:26;;43531:9;43525:4;43521:20;43517:1;43506:9;43502:17;43495:47;43555:131;43681:4;43555:131;:::i;:::-;43547:139;;43286:403;;;:::o;43691:171::-;43731:4;43747:20;43765:1;43747:20;:::i;:::-;43742:25;;43777:20;43795:1;43777:20;:::i;:::-;43772:25;;43812:1;43809;43806:8;43803:34;;;43817:18;;:::i;:::-;43803:34;43858:1;43855;43851:9;43843:17;;43691:171;;;;:::o;43864:281::-;43904:3;43919:20;43937:1;43919:20;:::i;:::-;43914:25;;43949:20;43967:1;43949:20;:::i;:::-;43944:25;;44095:1;44027:66;44023:74;44020:1;44017:81;44014:107;;;44101:18;;:::i;:::-;44014:107;44141:1;44138;44134:9;44127:16;;43864:281;;;;:::o;44147:217::-;44186:3;44205:24;44223:5;44205:24;:::i;:::-;44196:33;;44247:66;44240:5;44237:77;44234:103;;44317:18;;:::i;:::-;44234:103;44360:1;44353:5;44349:13;44342:20;;44147:217;;;:::o;44366:164::-;44410:77;44407:1;44400:88;44503:4;44500:1;44493:15;44523:4;44520:1;44513:15;44532:165;44572:1;44585:20;44603:1;44585:20;:::i;:::-;44580:25;;44615:20;44633:1;44615:20;:::i;:::-;44610:25;;44650:1;44640:35;;44655:18;;:::i;:::-;44640:35;44693:1;44690;44686:9;44681:14;;44532:165;;;;:::o;44699:156::-;44731:1;44744:20;44762:1;44744:20;:::i;:::-;44739:25;;44774:20;44792:1;44774:20;:::i;:::-;44769:25;;44809:1;44799:35;;44814:18;;:::i;:::-;44799:35;44851:1;44848;44844:9;44839:14;;44699:156;;;;:::o;44857:164::-;44901:77;44898:1;44891:88;44994:4;44991:1;44984:15;45014:4;45011:1;45004:15;45023:167;45159:27;45155:1;45147:6;45143:14;45136:51;45023:167;:::o;45192:350::-;45334:3;45351:67;45415:2;45410:3;45351:67;:::i;:::-;45344:74;;45423:93;45512:3;45423:93;:::i;:::-;45537:2;45532:3;45528:12;45521:19;;45192:350;;;:::o;45544:403::-;45710:4;45744:2;45733:9;45729:18;45721:26;;45789:9;45783:4;45779:20;45775:1;45764:9;45760:17;45753:47;45813:131;45939:4;45813:131;:::i;:::-;45805:139;;45544:403;;;:::o;45949:225::-;46085:34;46081:1;46073:6;46069:14;46062:58;46150:20;46145:2;46137:6;46133:15;46126:45;45949:225;:::o;46176:350::-;46318:3;46335:67;46399:2;46394:3;46335:67;:::i;:::-;46328:74;;46407:93;46496:3;46407:93;:::i;:::-;46521:2;46516:3;46512:12;46505:19;;46176:350;;;:::o;46528:403::-;46694:4;46728:2;46717:9;46713:18;46705:26;;46773:9;46767:4;46763:20;46759:1;46748:9;46744:17;46737:47;46797:131;46923:4;46797:131;:::i;:::-;46789:139;;46528:403;;;:::o;46933:222::-;47069:34;47065:1;47057:6;47053:14;47046:58;47134:17;47129:2;47121:6;47117:15;47110:42;46933:222;:::o;47157:350::-;47299:3;47316:67;47380:2;47375:3;47316:67;:::i;:::-;47309:74;;47388:93;47477:3;47388:93;:::i;:::-;47502:2;47497:3;47493:12;47486:19;;47157:350;;;:::o;47509:403::-;47675:4;47709:2;47698:9;47694:18;47686:26;;47754:9;47748:4;47744:20;47740:1;47729:9;47725:17;47718:47;47778:131;47904:4;47778:131;:::i;:::-;47770:139;;47509:403;;;:::o;47914:90::-;47965:6;47995:5;47989:12;47979:22;;47914:90;;;:::o;48006:156::-;48089:11;48119:6;48114:3;48107:19;48155:4;48150:3;48146:14;48131:29;;48006:156;;;;:::o;48164:340::-;48250:3;48274:38;48306:5;48274:38;:::i;:::-;48324:70;48387:6;48382:3;48324:70;:::i;:::-;48317:77;;48399:52;48444:6;48439:3;48432:4;48425:5;48421:16;48399:52;:::i;:::-;48472:29;48494:6;48472:29;:::i;:::-;48467:3;48463:39;48456:46;;48254:250;48164:340;;;;:::o;48506:612::-;48701:4;48735:3;48724:9;48720:19;48712:27;;48745:71;48813:1;48802:9;48798:17;48789:6;48745:71;:::i;:::-;48822:72;48890:2;48879:9;48875:18;48866:6;48822:72;:::i;:::-;48900;48968:2;48957:9;48953:18;48944:6;48900:72;:::i;:::-;49015:9;49009:4;49005:20;49000:2;48989:9;48985:18;48978:48;49039:76;49110:4;49101:6;49039:76;:::i;:::-;49031:84;;48506:612;;;;;;;:::o;49120:129::-;49176:5;49203:6;49197:13;49188:22;;49215:32;49241:5;49215:32;:::i;:::-;49120:129;;;;:::o;49251:325::-;49320:6;49365:2;49353:9;49344:7;49340:23;49336:32;49333:119;;;49371:79;;:::i;:::-;49333:119;49483:1;49504:63;49559:7;49550:6;49539:9;49535:22;49504:63;:::i;:::-;49494:73;;49458:115;49251:325;;;;:::o;49578:174::-;49714:34;49710:1;49702:6;49698:14;49691:58;49578:174;:::o;49754:350::-;49896:3;49913:67;49977:2;49972:3;49913:67;:::i;:::-;49906:74;;49985:93;50074:3;49985:93;:::i;:::-;50099:2;50094:3;50090:12;50083:19;;49754:350;;;:::o;50106:403::-;50272:4;50306:2;50295:9;50291:18;50283:26;;50351:9;50345:4;50341:20;50337:1;50326:9;50322:17;50315:47;50375:131;50501:4;50375:131;:::i;:::-;50367:139;;50106:403;;;:::o;50511:170::-;50647:30;50643:1;50635:6;50631:14;50624:54;50511:170;:::o;50683:350::-;50825:3;50842:67;50906:2;50901:3;50842:67;:::i;:::-;50835:74;;50914:93;51003:3;50914:93;:::i;:::-;51028:2;51023:3;51019:12;51012:19;;50683:350;;;:::o;51035:403::-;51201:4;51235:2;51224:9;51220:18;51212:26;;51280:9;51274:4;51270:20;51266:1;51255:9;51251:17;51244:47;51304:131;51430:4;51304:131;:::i;:::-;51296:139;;51035:403;;;:::o

Swarm Source

ipfs://7ce59a3371d326ddcd457477050170352c2c4c06a9e16b94212f97cca21b8767
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.