0x6a76120200000000000000000000000040a2accbd92bca938b02010e17a5b8929b49130d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1a0000000000000000000000000000000000000000000000000000000000000c0248d80ff0a0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000bfc400000000000000b361194cfe6312ee3210d53c15aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000646112e8ac00000000000000000000000082bf455e9ebd6a541ef10b683de1edcaf05ce7a182bf455e9ebd6a541ef10b683de1edcaf05ce7a1354ef20498d62a01b82777ef000000000000000000000000000000000000000000000000000000000000000000000000000000b361194cfe6312ee3210d53c15aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061c461ff715f82bf455e9ebd6a541ef10b683de1edcaf05ce7a1354ef20498d62a01b82777ef0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000615b60c060405234801561000f575f5ffd5b5060405161611b38038061611b83398101604081905261002e9161005c565b6001600160a01b039182166080521660a052610094565b6001600160a01b0381168114610059575f5ffd5b50565b5f5f6040838503121561006d575f5ffd5b825161007881610045565b602084015190925061008981610045565b809150509250929050565b60805160a051615fe86101335f395f818161051a0152818161088c01528181610928015281816109bf01528181610cca015281816110f60152818161131a01528181611753015281816119fc01528181611a5b0152818161275b015261297501525f81816108ba01528181611348015281816127cc01528181613535015281816137ab01528181613a0501528181613c6f01526141c30152615fe85ff3fe6080604052600436106100f9575f3560e01c80630828a2f8146100fd578063182148ef1461016f5780632dda106b146101905780634d7b0900146101be5780634eaaa230146101df5780636e29ebfb14610200578063745640631461021f5780637594cdc31461023e5780638129fc1c14610252578063ab6faa7214610266578063ac9650d814610285578063b68eeb28146102b1578063b7e0ca96146102d0578063bb7d896014610319578063be22465d14610338578063bece75321461035c578063c79ee60d14610370578063e4ecc239146103b5578063f23a6e61146103c8578063f34f6c1a1461040c578063fe5ff82414610420575b5f5ffd5b348015610108575f5ffd5b5061011c610117366004614fdd565b61043f565b60408051600298890b815296880b602088015294870b948601949094529190940b6060840152608083019390935260a08201929092526001600160801b0390911660c082015260e0015b60405180910390f35b34801561017a575f5ffd5b506101836104f5565b60405161016691906150aa565b34801561019b575f5ffd5b506101af6101aa366004615105565b610508565b604051610166939291906151c6565b3480156101c9575f5ffd5b506101d261055b565b60405161016691906151ed565b3480156101ea575f5ffd5b506101fe6101f9366004615201565b61056b565b005b34801561020b575f5ffd5b506101fe61021a3660046152a6565b6105a3565b34801561022a575f5ffd5b506101fe6102393660046152c6565b610790565b348015610249575f5ffd5b506101d26107a6565b34801561025d575f5ffd5b506101fe6107b0565b348015610271575f5ffd5b506101fe610280366004615351565b610a57565b348015610290575f5ffd5b506102a461029f3660046153dc565b610a6f565b604051610166919061541a565b3480156102bc575f5ffd5b506101fe6102cb36600461549e565b610b7c565b3480156102db575f5ffd5b506102e46110ec565b60408051600296870b815294860b602086015292850b9284019290925290920b6060820152608081019190915260a001610166565b348015610324575f5ffd5b506101fe61033336600461552f565b6111b1565b348015610343575f5ffd5b5061034c61199d565b6040519015158152602001610166565b348015610367575f5ffd5b506101d2611a33565b34801561037b575f5ffd5b506103a761038a36600461559d565b6001600160a01b03165f9081526005602052604090205460f81c90565b604051908152602001610166565b6101fe6103c33660046155b8565b611a3e565b3480156103d3575f5ffd5b506103f36103e236600461567c565b63f23a6e6160e01b95945050505050565b6040516001600160e01b03199091168152602001610166565b348015610417575f5ffd5b506101fe612154565b34801561042b575f5ffd5b506101fe61043a366004615745565b61227c565b6001600160a01b0382165f90815260046020818152604080842085855290915280832054905163cacfb53560e01b81529182015281908190819081908190819073000000000002bf547771f919002b51231d9b411e9063cacfb5359060240160e060405180830381865af41580156104b9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104dd91906157c4565b959f949e50929c50909a509850965090945092505050565b365f6104ff6122ae565b605c0192915050565b5f5f606061054b87868660018a6105467f00000000000000000000000000000000000000000000000000000000000000006105416122bf565b6122cf565b612355565b9250925092509450945094915050565b5f61056660146125e1565b905090565b61057a33848460018b8b6125f9565b50505f61058c338787612710866126c0565b90508015610599575f8190555b5050505050505050565b5f6105ac6107a6565b90505f6105b761055b565b905083826001600160a01b03166307a2d13a846001600160a01b03166370a08231336040518263ffffffff1660e01b81526004016105f591906151ed565b602060405180830381865afa158015610610573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106349190615838565b6040518263ffffffff1660e01b815260040161065291815260200190565b602060405180830381865afa15801561066d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106919190615838565b108061076c57506040516370a0823160e01b815283906001600160a01b038316906307a2d13a9082906370a08231906106ce9033906004016151ed565b602060405180830381865afa1580156106e9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070d9190615838565b6040518263ffffffff1660e01b815260040161072b91815260200190565b602060405180830381865afa158015610746573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061076a9190615838565b105b1561078a576040516334b3313560e11b815260040160405180910390fd5b50505050565b61079f848484613415856126c0565b5050505050565b5f6105665f6125e1565b5f54156107d057604051637983c05160e01b815260040160405180910390fd5b5f6107d9611a33565b6001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015610814573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108389190615860565b50505050504260d81b65ffffff000000601883901b160162ffffff82160174f590a6f276170d89e9f276170d89e9f276170d89e960301b015f5560405163558a729760e01b81529092506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016915063558a7297906108e5907f0000000000000000000000000000000000000000000000000000000000000000906001906004016158e2565b6020604051808303815f875af1158015610901573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061092591906158fd565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663558a729761095d6107a6565b60016040518363ffffffff1660e01b815260040161097c9291906158e2565b6020604051808303815f875af1158015610998573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bc91906158fd565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663558a72976109f461055b565b60016040518363ffffffff1660e01b8152600401610a139291906158e2565b6020604051808303815f875af1158015610a2f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a5391906158fd565b5050565b610a668787878787878761279e565b50505050505050565b6060816001600160401b03811115610a8957610a89615638565b604051908082528060200260200182016040528015610abc57816020015b6060815260200190600190039081610aa75790505b5090505f5b82811015610b75575f8030868685818110610ade57610ade615918565b9050602002810190610af0919061592c565b604051610afe92919061596e565b5f60405180830381855af49150503d805f8114610b36576040519150601f19603f3d011682016040523d82523d5f602084013e610b3b565b606091505b509150915081610b4d57805160208201fd5b80848481518110610b6057610b60615918565b60209081029190910101525050600101610ac1565b5092915050565b610b883384845f612a57565b5f5f5f73000000000002a1aee756f088f0ab4a98a9866f55630367da50610bad611a33565b5f546040518363ffffffff1660e01b8152600401610bcc92919061597d565b608060405180830381865af4158015610be7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c0b9190615996565b509450909250905060cb610c2a610c2284866159fa565b60020b612ad3565b1380610c42575060cb610c40610c2283866159fa565b135b15610c60576040516388cce42960e01b815260040160405180910390fd5b50610c6d90508782612af1565b5f610c766107a6565b90505f610c8161055b565b6001600160a01b038b165f9081526004602090815260408083208d8452909152812054919250905f610cb38c83612ba1565b509050846001600160a01b031663fc380c22610cf17f00000000000000000000000000000000000000000000000000000000000000006105416122bf565b6040516001600160e01b031960e084901b168152600291820b60048201529089900b6024820152604481018f90526001600160801b03851660648201526084810184905260a401602060405180830381865afa158015610d53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d779190615838565b6040516317066a5760e21b81529093506001600160a01b0386169250635c19a95c9150610da8908e906004016151ed565b5f604051808303815f87803b158015610dbf575f5ffd5b505af1158015610dd1573d5f5f3e3d5ffd5b50506040516317066a5760e21b81526001600160a01b0385169250635c19a95c9150610e01908e906004016151ed565b5f604051808303815f87803b158015610e18575f5ffd5b505af1158015610e2a573d5f5f3e3d5ffd5b50505050610e5960018b8d6001620d89e719610e4691906159fa565b610e54620d89e86001615a1f565b612bf9565b5050604051630b6d8fdb60e41b81525f9073000000000002a1aee756f088f0ab4a98a9866f559063b6d8fdb090610e9c908f9086908a908a908a90600401615a44565b602060405180830381865af4158015610eb7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610edb9190615838565b604051633bec831b60e01b81529091506001600160a01b03851690633bec831b90610f0e908f9033908690600401615a79565b5f604051808303815f87803b158015610f25575f5ffd5b505af1158015610f37573d5f5f3e3d5ffd5b50505050826001600160a01b0316633bec831b8d33610f568560801d90565b6040518463ffffffff1660e01b8152600401610f7493929190615a79565b5f604051808303815f87803b158015610f8b575f5ffd5b505af1158015610f9d573d5f5f3e3d5ffd5b50506040516374a8f10360e01b81526001600160a01b03871692506374a8f1039150610fcd908f906004016151ed565b5f604051808303815f87803b158015610fe4575f5ffd5b505af1158015610ff6573d5f5f3e3d5ffd5b50506040516374a8f10360e01b81526001600160a01b03861692506374a8f1039150611026908f906004016151ed565b5f604051808303815f87803b15801561103d575f5ffd5b505af115801561104f573d5f5f3e3d5ffd5b505050506110738c8b8b6127105f6110648c90565b6001600160801b0316116126c0565b5086156110905761108e3389896134155f6110648c60801c90565b505b8a8c6001600160a01b0316336001600160a01b03167f0678d01a4d4354dc7b249ea5bc59dcd8ce288bfb79e3522e80134a85807f35a2856040516110d691815260200190565b60405180910390a4505050505050505050505050565b5f5f5f5f5f61111d7f00000000000000000000000000000000000000000000000000000000000000006105416122bf565b945073000000000002a1aee756f088f0ab4a98a9866f55630367da50611141611a33565b5f546040518363ffffffff1660e01b815260040161116092919061597d565b608060405180830381865af415801561117b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061119f9190615996565b505f5497989297919650945092509050565b6111bd8386865f612a57565b5f85855f1981018181106111d3576111d3615918565b9050602002013590506111ef8382612c8a90919063ffffffff16565b15806111fb5750600383115b1561121957604051635bea27bb60e11b815260040160405180910390fd5b5f6112226107a6565b90505f61122d61055b565b6040516317066a5760e21b81529091506001600160a01b03831690635c19a95c9061125c9089906004016151ed565b5f604051808303815f87803b158015611273575f5ffd5b505af1158015611285573d5f5f3e3d5ffd5b50506040516317066a5760e21b81526001600160a01b0384169250635c19a95c91506112b59089906004016151ed565b5f604051808303815f87803b1580156112cc575f5ffd5b505af11580156112de573d5f5f3e3d5ffd5b505050506001600160a01b0386165f9081526004602090815260408083208684529091528120546113129085908890612ca0565b90505f6113417f00000000000000000000000000000000000000000000000000000000000000006105416122bf565b90505f5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633cc496b761137d6122bf565b306113888c8f612d0d565b6113928a60e81c90565b61139c8b60d01c90565b8a60016040518863ffffffff1660e01b81526004016113c19796959493929190615aa0565b6040805180830381865afa1580156113db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ff9190615ade565b90925090506114176001600160801b03831682612d1f565b6001600160a01b038c165f9081526001602090815260408083208c845282528083208e845290915290208054908290559093506114548482612d30565b93505050505f6114618490565b6001600160801b031690505f6114be600160401b836114808660801c90565b6001600160801b0316028161149757611497615b16565b046114b6600160401b6001600160801b03871686025b5f919004612d70565b9060801b0190565b60405163083953d960e01b81529091506001600160a01b0388169063083953d9906114f7908e905f908190819088820390600401615b2a565b6020604051808303815f875af1158015611513573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115379190615b5e565b50856001600160a01b031663083953d98c5f5f5f6115558760801d90565b5f036040518663ffffffff1660e01b8152600401611577959493929190615b2a565b6020604051808303815f875af1158015611593573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b79190615b5e565b505f6115c8898c603002604c011c90565b6115d28a8d612d8a565b6115dc8b8e612d0d565b6040516020016115ee93929190615b7e565b60408051601f1981840301815291815281516020928301205f818152600390935291205490915061161f9083612d9d565b5f828152600360209081526040918290209290925580518d81529182018490528a916001600160a01b038f16917f4358c577d4c62044fa8caea3ad9778fe842e777c7903f2452d20661f6ff250b7910160405180910390a35050505f5f5f5f73000000000002a1aee756f088f0ab4a98a9866f55630367da506116a0611a33565b5f546040518363ffffffff1660e01b81526004016116bf92919061597d565b608060405180830381865af41580156116da573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116fe9190615996565b509550909250905060cb611715610c2284876159fa565b138061172d575060cb61172b610c2283876159fa565b135b1561174b576040516388cce42960e01b815260040160405180910390fd5b61178261177a7f00000000000000000000000000000000000000000000000000000000000000006105416122bf565b838387612ddc565b925050505f73000000000002a1aee756f088f0ab4a98a9866f5563b6d8fdb08d5f868c8c6040518663ffffffff1660e01b81526004016117c6959493929190615a44565b602060405180830381865af41580156117e1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118059190615838565b604051633bec831b60e01b81529091506001600160a01b03891690633bec831b90611838908f9033908690600401615a79565b5f604051808303815f87803b15801561184f575f5ffd5b505af1158015611861573d5f5f3e3d5ffd5b50505050866001600160a01b0316633bec831b8d336118808560801d90565b6040518463ffffffff1660e01b815260040161189e93929190615a79565b5f604051808303815f87803b1580156118b5575f5ffd5b505af11580156118c7573d5f5f3e3d5ffd5b50506040516374a8f10360e01b81526001600160a01b038b1692506374a8f10391506118f7908f906004016151ed565b5f604051808303815f87803b15801561190e575f5ffd5b505af1158015611920573d5f5f3e3d5ffd5b50506040516374a8f10360e01b81526001600160a01b038a1692506374a8f1039150611950908f906004016151ed565b5f604051808303815f87803b158015611967575f5ffd5b505af1158015611979573d5f5f3e3d5ffd5b5050505061198d8c8f8f856127108f612e14565b5050505050505050505050505050565b5f80546103b9611a2c6002600862ffffff60cc86901c160660180262ffffff1684901c600860c986901c62ffffff16816119d9576119d9615b16565b0660180262ffffff1685901c0160020b816119f6576119f6615b16565b05611a237f00000000000000000000000000000000000000000000000000000000000000006105416122bf565b0360020b612ad3565b1391505090565b5f61056660286125e1565b611a4a8383835f612a57565b5f611a53612f9f565b90505f611a827f00000000000000000000000000000000000000000000000000000000000000006105416122bf565b90505f5f73000000000002a1aee756f088f0ab4a98a9866f55630367da50611aa8611a33565b5f546040518363ffffffff1660e01b8152600401611ac792919061597d565b608060405180830381865af4158015611ae2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b069190615996565b509193509091506102019050611b2085850360020b612ad3565b1315611b3f576040516388cce42960e01b815260040160405180910390fd5b60408051600480825260a082019092525f916020820160808036833701905050905082815f81518110611b7457611b74615918565b602002602001019060020b908160020b815250508481600181518110611b9c57611b9c615918565b600292830b60209182029290920101528151839183918110611bc057611bc0615918565b602002602001019060020b908160020b815250508381600381518110611be857611be8615918565b602002602001019060020b908160020b81525050611c0f88888887856127105f6001613030565b505f91508190508080866001600160401b03811115611c3057611c30615638565b604051908082528060200260200182016040528015611c6957816020015b611c56614f5d565b815260200190600190039081611c4e5790505b5090505f611c7c8a8a8a60015f8b612355565b9194509092509050611c8c6107a6565b6001600160a01b03166309e085108b898587866040518663ffffffff1660e01b8152600401611cbf959493929190615b9c565b602060405180830381865afa158015611cda573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cfe9190615838565b9450611d0861055b565b6001600160a01b03166309e085108b8985611d238860801c90565b611d2d8760801c90565b6040518663ffffffff1660e01b8152600401611d4d959493929190615b9c565b602060405180830381865afa158015611d68573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d8c9190615838565b93505050611d986107a6565b6001600160a01b0316635c19a95c896040518263ffffffff1660e01b8152600401611dc391906151ed565b5f604051808303815f87803b158015611dda575f5ffd5b505af1158015611dec573d5f5f3e3d5ffd5b50505050611df861055b565b6001600160a01b0316635c19a95c896040518263ffffffff1660e01b8152600401611e2391906151ed565b5f604051808303815f87803b158015611e3a575f5ffd5b505af1158015611e4c573d5f5f3e3d5ffd5b505050505f5f6060611e7f8b6001620d89e719611e6991906159fa565b611e77620d89e86001615a1f565b5f8e8e6125f9565b90925090505f73000000000002a1aee756f088f0ab4a98a9866f55632a7f2f948888611eaa8d6130f7565b6040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b03166044820152606481018690526084810188905260a4016040805180830381865af4158015611f07573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f2b9190615be7565b80925081955050505f8c90505f8a90505f8d8d808060200260200160405190810160405280939291908181526020018383602002808284375f92018290525093945073000000000002a1aee756f088f0ab4a98a9866f559250637679c3929150869050848989611f996107a6565b611fa161055b565b611faa8b6130f7565b60036040518963ffffffff1660e01b8152600401611fcf989796959493929190615c60565b602060405180830381865af4158015611fea573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061200e9190615838565b905061201a8882613407565b97505050505050505061202b61055b565b6001600160a01b031663e81c1054338b6120458560801d90565b6040518463ffffffff1660e01b815260040161206393929190615a79565b5f604051808303815f87803b15801561207a575f5ffd5b505af115801561208c573d5f5f3e3d5ffd5b505050506120986107a6565b6001600160a01b031663e81c105434338c856040518563ffffffff1660e01b81526004016120c893929190615a79565b5f604051808303818588803b1580156120df575f5ffd5b505af11580156120f1573d5f5f3e3d5ffd5b5050505050612106338c8c61271060016126c0565b506040518181526001600160a01b038a169033907f6f365e31bb09bf241744307ce951bb36bbc5d4a332da9714f77b420a84962de89060200160405180910390a35050505050505050505050565b5f61215d611a33565b90505f5f826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa15801561219d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121c19190615860565b50505f8054604051631a94ed5d60e31b815261ffff808716600483015285166024820152603c604482015260648101919091526001600160a01b038a16608482015293975091955090935073000000000002a1aee756f088f0ab4a98a9866f55925063d4a76ae89160a40190506040805180830381865af4158015612248573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061226c9190615d03565b915050801561078a575f55505050565b61228a600187338686612bf9565b50505f61229c338787612710866126c0565b90508015610a66575f55505050505050565b600119368181013560f01c90030190565b5f6122ca603c613483565b919050565b5f5f6122da83613498565b604051631e2eaeaf60e01b8152600481018290529091505f906001600160a01b03861690631e2eaeaf90602401602060405180830381865afa158015612322573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123469190615838565b60a01c60020b95945050505050565b5f806060866001600160401b0381111561237157612371615638565b6040519080825280602002602001820160405280156123aa57816020015b612397614f5d565b81526020019060019003908161238f5790505b5090505f5b878110156125d4575f8989838181106123ca576123ca615918565b905060200201359050604051806040016040528082815260200160045f8e6001600160a01b03166001600160a01b031681526020019081526020015f205f8481526020019081526020015f205481525083838151811061242c5761242c615918565b60200260200101819052505f5f61247c8361247487878151811061245257612452615918565b602002602001015160016002811061246c5761246c615918565b602002015190565b8f8d8c6134d4565b915091505f61248a8461375b565b90505f5b818110156125c4576124a08582612c8a565b5f03612598578a612570575f6124bb8683603002604c011c90565b6124c58784612d8a565b6124cf8885612d0d565b6040516020016124e193929190615b7e565b6040516020818303038152906040528051906020012090505f6125048784613795565b50505f83815260036020908152604080832054600290925290912054919250612567916125609184918a886004811061253f5761253f615918565b60200201518a896004811061255657612556615918565b6020020151613899565b8c90612d9d565b9a5050506125bc565b61259184826004811061258557612585615918565b60200201518a90612d9d565b98506125bc565b6125b98482600481106125ad576125ad615918565b6020020151899061397c565b97505b60010161248e565b50846001019450505050506123af565b5096509650969350505050565b5f5f6125eb6122ae565b929092013560601c92915050565b5f6060826001600160401b0381111561261457612614615638565b60405190808252806020026020018201604052801561264d57816020015b61263a614f7b565b8152602001906001900390816126325790505b5090505f5b838110156126b4575f6126808787878581811061267157612671615918565b905060200201358c8c8c612bf9565b84848151811061269257612692615918565b602090810291909101015290506126a98482613407565b935050600101612652565b50965096945050505050565b5f5f5f5f5f73000000000002a1aee756f088f0ab4a98a9866f55630367da506126e7611a33565b5f546040518363ffffffff1660e01b815260040161270692919061597d565b608060405180830381865af4158015612721573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127459190615996565b93509350935093506127918a8a8a61278a6127827f00000000000000000000000000000000000000000000000000000000000000006105416122bf565b898989612ddc565b8b8b612e14565b9998505050505050505050565b5f87875f1981018181106127b4576127b4615918565b9050602002013590506127ca3389896001612a57565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663db620f4f6128016122bf565b6040518263ffffffff1660e01b815260040161281f91815260200190565b602060405180830381865afa15801561283a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061285e9190615d2f565b6001600160401b0316816001600160401b031614612895576040516393db026360e01b81525f600482015260240160405180910390fd5b335f908152600460209081526040808320848452909152902054156128cd576040516314c1cb9960e31b815260040160405180910390fd5b5f5f6128dc83898989896139dc565b915091505f5f5f5f5f73000000000002a1aee756f088f0ab4a98a9866f55630367da50612907611a33565b5f546040518363ffffffff1660e01b815260040161292692919061597d565b608060405180830381865af4158015612941573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129659190615996565b93509350935093506129a461299c7f00000000000000000000000000000000000000000000000000000000000000006105416122bf565b858585612ddc565b945080156129b1575f8190555b5050335f8181526004602090815260408083208a845290915290206001600160a01b031960a086901b1663ffffffff60801b608089901b16016001600160801b038e1601908190559250612a0c91508d8d856134158b612e14565b6040805182815260208101859052869133917fd25e9c8a7c7dd9c3d0d451d7f1fae7c97675a289891e1003df62e9a9f064d281910160405180910390a3505050505050505050505050565b8082035f805b82811015612a9357612a8982878784818110612a7b57612a7b615918565b905060200201356001613ae2565b9150600101612a5d565b506001600160a01b0386165f908152600560205260409020548114612acb57604051634cf43be760e11b815260040160405180910390fd5b505050505050565b5f5f8213612ae957612ae482615d4a565b612aeb565b815b92915050565b5f612afb8361375b565b90505f5b81811015612b86575f80612b24612b168785612d8a565b603088901c61ffff16613b61565b90925090505f612b398785603002604c011c90565b905081810160020b8660020b121580612b59575082810360020b8660020b125b15612b7857612b688785612c8a565b600103612b785750505050505050565b505050806001019050612aff565b5050604051633b90fbed60e11b815260040160405180910390fd5b5f5f5f612bad8561375b565b90505f5b81811015612bf0575f5f612bc6888885613ba4565b9092509050612bd58683613407565b9550612be18582613407565b94508260010192505050612bb1565b50509250929050565b5f612c02614f7b565b6001600160a01b0385165f908152600460209081526040808320898452909152902054612c338886868a858b613c43565b809450819350505086866001600160a01b03167fd7b5aa501d6c32aac0775207ad2e590a1ef403c1c04f5ec35e0f3fa31695e0318385604051612c77929190615d64565b60405180910390a3509550959350505050565b5f60026048603084020184901c5b069392505050565b5f8080612cad8686613e67565b90925090505f612cbd8787613e9e565b612cd0906001600160801b038716615d9a565b9050612cdc8787613eb0565b5f03612cf757612ced838383613ec2565b9350505050612d06565b612ced838383613f52565b5050505b9392505050565b5f60026049603084020184901c612c98565b60801b6001600160801b0319160190565b80820382811180612d525750826001600160801b0316816001600160801b0316115b15612aeb57604051633486405d60e21b815260040160405180910390fd5b6001600160801b0319821691016001600160801b03160190565b5f6110006064603084020184901c612c98565b81810182811080612d525750826001600160801b0316816001600160801b03161015612aeb57604051633486405d60e21b815260040160405180910390fd5b62ffffff841665ffffff000000601885901b160162ffffff60301b603084901b160162ffffff60481b604883901b1601949350505050565b612e208686865f612a57565b6001600160601b0383166001600160481b03601885901c1665ffffffffffff603086901c1662ffffff604887901c166060620ddbb16002848603810b81900a858503820b82900a01858803820b9190910a011315612f395760408051600480825260a08201909252906020820160808036833701905050905083815f81518110612eac57612eac615918565b602002602001019060020b908160020b815250508281600181518110612ed457612ed4615918565b600292830b60209182029290920101528151839183918110612ef857612ef8615918565b602002602001019060020b908160020b815250508481600381518110612f2057612f20615918565b602002602001019060020b908160020b81525050612f81565b604080516001808252818301909252906020808301908036833701905050905083815f81518110612f6c57612f6c615918565b602002602001019060020b908160020b815250505b612f928b8b8b88858c60018d613030565b5050505050505050505050565b5f73000000000002a1aee756f088f0ab4a98a9866f5563fbf2fc46612fc2611a33565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526102586024820152604401602060405180830381865af415801561300c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105669190615db1565b5f5f5f6130418b8b8b875f8d612355565b895192955090935091505f805b828110156130915761307d8e8b838151811061306c5761306c615918565b60200260200101518689898e613f8d565b15613089576001909101905b60010161304e565b5086801561309f5750818114155b156130bd576040516334b3313560e11b815260040160405180910390fd5b861580156130ca57508015155b156130e857604051632a23f1ad60e01b815260040160405180910390fd5b50505050505050505050505050565b5f5f5f8360020b1261310c578260020b613113565b8260020b5f035b9050620d89e8811115613139576040516333a3bdff60e21b815260040160405180910390fd5b5f816001165f0361314e57600160801b613160565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b03169050600282161561318a576ffff97272373d413259a46990580e213a0260801c5b60048216156131a9576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156131c8576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156131e7576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613206576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615613225576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613244576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613264576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613284576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156132a4576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156132c4576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156132e4576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615613304576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615613324576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615613344576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613365576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613385576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156133a4576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156133c1576b048a170391f7dc42444e8fa20260801c5b5f8460020b13156133e057805f19816133dc576133dc615b16565b0490505b600160201b8106156133f35760016133f5565b5f5b60ff16602082901c0192505050919050565b5f5f6134138360801d90565b600f0b6134208560801d90565b600f0b019050805f84600f0b86600f0b0190505f8190508383600f0b14158061344c57508181600f0b14155b1561346a57604051633486405d60e21b815260040160405180910390fd5b613478836114b68784612d70565b979650505050505050565b5f5f61348d6122ae565b929092013592915050565b6040515f906134b7908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6134dc614f7b565b6134e4614f99565b5f6134ee8861375b565b90505f5b8181101561374f575f6135058a83612c8a565b905080600114806135135750865b15613746575f6135248b848c612ca0565b90505f6135318c85612d0d565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633cc496b761356a6122bf565b30846135768760e81c90565b6135808860d01c90565b8e8a6040518863ffffffff1660e01b81526004016135a49796959493929190615aa0565b6040805180830381865afa1580156135be573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135e29190615ade565b6001600160801b03918216911687866004811061360157613601615918565b602002015188876004811061361857613618615918565b60209081029190910151810192909252919091526001600160a01b038b165f9081526001825260408082208f8352835280822087835290925220546136e9600160401b846001600160801b031661366f8460801c90565b6001600160801b03168a896004811061368a5761368a615918565b6020020151600160200201510302816136a5576136a5615b16565b046114b6600160401b866001600160801b0316856001600160801b03168c8b600481106136d4576136d4615918565b6020020151510302816114ad576114ad615b16565b8886600481106136fb576136fb615918565b60200201525060018390036137435761372b87856004811061371f5761371f615918565b60200201515f9061397c565b87856004811061373d5761373d615918565b60200201525b50505b506001016134f2565b50509550959350505050565b5f72fe0000000000fe0000000000fe0000000000fe604083901c165b6001603083021b811061378f57816001019150613777565b50919050565b5f808080806137a48787613e67565b915091505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634b2727716137e06122bf565b306137eb8c8c612d0d565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b0390911660248301526044820152600286810b606483015285900b608482015260a401602060405180830381865afa15801561384c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138709190615838565b905080945061387f8160801c90565b93508385016001600160801b031695505050509250925092565b805160208201515f91600160401b6001600160801b038716909103880281900491608087901c900388020461397061392682156138d657826138d9565b5f195b6138e38a60801c90565b6001600160801b03166138f68960801c90565b6001600160801b0316028161390d5761390d615b16565b046139188860801c90565b6001600160801b03166140c8565b61396184156139355784613938565b5f195b8a6001600160801b0316896001600160801b0316028161395a5761395a615b16565b0488613918565b6001600160801b031690612d1f565b98975050505050505050565b5f5f6139888360801d90565b600f0b6139958560801d90565b600f0b039050805f84600f0b86600f0b0390505f8190508383600f0b14158061344c57508181600f0b1461346a57604051633486405d60e21b815260040160405180910390fd5b5f5f5f6139e761199d565b90508015613a01578360020b8560020b1315613a01579293925b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2aabadc613a3a6104f5565b8c8c8b8b6040518663ffffffff1660e01b8152600401613a5e959493929190615dcc565b60a0604051808303815f875af1158015613a7a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a9e9190615e0c565b91509150613aae8a838b8b6140dd565b613ac28a8a838960020b8b60020b126143a0565b90955093508215613ad557632710271094505b5050509550959350505050565b5f5f83604051602001613af791815260200190565b604051602081830303815290604052805190602001205f1c85186001600160f81b031690505f613b268561375b565b90505f8415613b4757613b3d8260f889901c615e8a565b60ff169050613b51565b8160f888901c0390505b60f81b9190910195945050505050565b5f806002613b6f8486615ea3565b613b799190615ec2565b613b98613b868587615f06565b62ffffff166002808204910615150190565b915091505b9250929050565b5f5f5f613bb2868686614503565b90505f613bbf8786612c8a565b159050613bcc8786612d0d565b5f03613c0a578015613bf757613bf0613be9836145cf565b6145cf565b5f90612d70565b9250613c39565b613c03613be9836145cf565b9350613c39565b8015613c2657613bf0613c20613be48460801c90565b60801b90565b613c36613c20613be48460801c90565b93505b5050935093915050565b613c4b614f7b565b5f613c5461199d565b15613c6b578560020b8760020b1315613c6b579495945b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635d95f1d2613ca46104f5565b89898d8d6040518663ffffffff1660e01b8152600401613cc8959493929190615dcc565b60a0604051808303815f875af1158015613ce4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d089190615e0c565b915091505f613d1a8689858a8f6145f5565b955090505f80613d2a8a8a612ba1565b91509150613e55613d3961055b565b6001600160a01b031663083953d98a613d528660801d90565b613d5c8660801d90565b613d668a60801d90565b613d708a60801d90565b6040518663ffffffff1660e01b8152600401613d90959493929190615b2a565b6020604051808303815f875af1158015613dac573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613dd09190615b5e565b6114b6613ddb6107a6565b6001600160a01b031663083953d98c87878b8b6040518663ffffffff1660e01b8152600401613e0e959493929190615b2a565b6020604051808303815f875af1158015613e2a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e4e9190615b5e565b8990612d70565b95505050505050965096945050505050565b5f80613e93613e7b8585603002604c011c90565b613e858686612d8a565b603087901c61ffff16614934565b909590945092505050565b5f60806041603084020184901c612c98565b5f60026040603084020184901c612c98565b5f5f613ecd856130f7565b90505f613ed9856130f7565b9050613f488686613f19613f1488613f03876001600160a01b0316896001600160a01b0316614956565b8888036001600160a01b03166149b4565b614a5e565b6001600160e81b031960e884901b1662ffffff60d01b60d084901b16016001600160801b038216019392505050565b9695505050505050565b5f5f613f5d856130f7565b90505f613f69856130f7565b9050613f488686613f19613f1488600160601b8888036001600160a01b03166149b4565b5f5f5f6140a7613f9b6107a6565b6001600160a01b03166309e085108b8b8b8b8b6040518663ffffffff1660e01b8152600401613fce959493929190615b9c565b602060405180830381865afa158015613fe9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061400d9190615838565b61401561055b565b6001600160a01b03166309e085108c8c8c6140308d60801c90565b61403a8d60801c90565b6040518663ffffffff1660e01b815260040161405a959493929190615b9c565b602060405180830381865afa158015614075573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140999190615838565b6140a28b6130f7565b614a88565b915091506140b88185612710614b73565b9091101598975050505050505050565b5f8183106140d65781612d06565b5090919050565b6140e933856001614baf565b5f6140f38561375b565b90505f5b81811015612acb575f61410a8783612c8a565b90505f61411c8884603002604c011c90565b6141268985612d8a565b6141308a86612d0d565b60405160200161414293929190615b7e565b60405160208183030381529060405280519060200120905061419487846004811061416f5761416f615918565b602002015160035f8481526020019081526020015f2054612d9d90919063ffffffff16565b5f828152600360205260408120919091556141b0898589612ca0565b90505f80806141bf8c88612d0d565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633cc496b76141f86122bf565b30846142048960e81c90565b61420e8a60d01c90565b627fffff8d6040518863ffffffff1660e01b81526004016142359796959493929190615aa0565b6040805180830381865afa15801561424f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142739190615ade565b6001600160801b03918216945016915061428d8383612d1f565b60015f336001600160a01b03166001600160a01b031681526020019081526020015f205f8e81526020019081526020015f205f8981526020019081526020015f2081905550505f6143068c88885f146142fc576142f78c6001600160401b0316600960201b6140c8565b614c1a565b600960201b614c1a565b9050855f0361438f575f858152600260205260409020546001600160801b03851680830361437d84868402608086901c8402018161434657614346615b16565b048583866001600160801b031602858a02018161436557614365615b16565b046001600160801b0316612d1f90919063ffffffff16565b5f898152600260205260409020555050505b5050505050508060010190506140f7565b5f5f5f5f6143ae8888612ba1565b915091505f5f6143bc6107a6565b6001600160a01b0316630ebd39063386868c8c6040518663ffffffff1660e01b81526004016143ef959493929190615f24565b60408051808303815f875af115801561440a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061442e9190615f59565b915091505f5f61443c61055b565b6001600160a01b0316630ebd3906336144558960801d90565b61445f8960801d90565b6144698f60801d90565b8e6040518663ffffffff1660e01b815260040161448a959493929190615f24565b60408051808303815f875af11580156144a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144c99190615f59565b909250905065ffffffff0000601083901b1684016144f06001600160801b03851683612d1f565b9750975050505050505094509492505050565b5f808080806145128887613e67565b915091505f614543614523846130f7565b6001600160a01b0316614535846130f7565b6001600160a01b0316614956565b905061454f8988613eb0565b5f036145885761455f8988613e9e565b6145699089615f7d565b9450614581613f14866001600160801b031683614c8c565b93506145bc565b6145928988613e9e565b61459c9089615f7d565b93506145b9613f14856001600160801b0316600160601b84614b73565b94505b6127916001600160801b03861685612d1f565b805f600f82900b12156122ca5760405163b668004560e01b815260040160405180910390fd5b5f6145fe614f7b565b5f6146088761375b565b9050614612614f99565b61462388878b6001627fffff6134d4565b90935090505f5b82811015614901575f84826004811061464557614645615918565b602002015190505f61465c8b84603002604c011c90565b6146668c85612d8a565b6146708d86612d0d565b60405160200161468293929190615b7e565b6040516020818303038152906040528051906020012090505f6146d58b85600481106146b0576146b0615918565b602002015160035f8581526020019081526020015f2054612d9d90919063ffffffff16565b90506146e18c85612c8a565b60010361470c5788156146fb576146f8818461397c565b90505b6147058884613407565b97506148b9565b5f5f5f61471a8f888f612ca0565b9050806001600160801b031692506147378f88600960201b614c1a565b91505f90506147468383615f9f565b5f868152600260205260408120549192506147796147648686615f9f565b87848b8e8e6004811061255657612556615918565b90506147858682612d30565b95506147918d82613407565b9c50808c8a600481106147a6576147a6615918565b602002015289895f869003614802576147fd8c82600481106147ca576147ca615918565b6020020151600160200201518d83600481106147e8576147e8615918565b6020020151516001600160801b031690612d1f565b6148a3565b6148a3866148596148138d60801d90565b600f0b600160401b028a86866004811061482f5761482f615918565b60200201516001602002015102896148478a60801c90565b6001600160801b03160203015f614cbe565b8161486657614866615b16565b04876148968d600160401b02600f0b8b87876004811061488857614888615918565b602002015151028a8a614847565b8161436557614365615b16565b5f8a815260026020526040902055505050505050505b5f918252600360209081526040808420929092556001600160a01b038e16835260018082528284208e855282528284208685529091529082209190915591909101905061462a565b506001600160a01b0389165f9081526004602090815260408083208b8452909152812081905561374f908a908a90614baf565b5f5f5f5f6149428686613b61565b90880394508701925050505b935093915050565b5f80805f19848609848602925082811083820303915050805f0361497f575060601c9050612aeb565b80600160601b1161498e575f5ffd5b5f600160601b85870980840360601c9310909103600160a01b0291909117949350505050565b5f80805f19858709858702925082811083820303915050805f036149e8575f84116149dd575f5ffd5b508290049050612d06565b8084116149f3575f5ffd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b806001600160801b03811681146122ca5760405163b668004560e01b815260040160405180910390fd5b5f5f600160601b836001600160a01b03161015614b0757614ab2846001600160801b031684614ccc565b614ac5906001600160801b038716615f9f565b614ae1614ad28660801c90565b6001600160801b031685614d28565b614aeb8760801c90565b6001600160801b0316614afe9190615f9f565b9150915061494e565b836001600160801b0316614b24866001600160801b031685614d7d565b614b2e9190615f9f565b614b388560801c90565b6001600160801b0316614b5d614b4e8860801c90565b6001600160801b031686614dc8565b614b679190615f9f565b91509150935093915050565b5f614b7f8484846149b4565b90505f8280614b9057614b90615b16565b8486091115612d06575f198110614ba5575f5ffd5b6001019392505050565b6001600160a01b0383165f90815260056020526040812054614bd2908484613ae2565b9050601960f882901c1115614bfa57604051630ed7e77760e01b815260040160405180910390fd5b6001600160a01b039093165f908152600560205260409020929092555050565b5f5f5f614c278686613795565b9194506001600160801b03908116935016905081158015614c46575080155b15614c52575050612d06565b5f8282600160201b0281614c6857614c68615b16565b04905084811115612d0257604051631d43cae160e11b815260040160405180910390fd5b5f614c978383614956565b90505f600160601b5b8385091115612aeb575f198110614cb5575f5ffd5b60010192915050565b5f8183136140d65781612d06565b5f6001600160801b036001600160a01b0383161015614d0757614d0083600160c01b6002856001600160a01b03160a6149b4565b9050612aeb565b614d0083600160801b614d236001600160a01b03861680614e13565b6149b4565b5f6001600160801b036001600160a01b0383161015614d5c57614d0083600160c01b6002856001600160a01b03160a614b73565b614d0083600160801b614d786001600160a01b03861680614e13565b614b73565b5f6001600160801b036001600160a01b0383161015614dac57614d00836002846001600160a01b03160a614e71565b614d0083614dc36001600160a01b03851680614e13565b614ecf565b5f6001600160801b036001600160a01b0383161015614df757614d00836002846001600160a01b03160a614f2d565b614d0083614e0e6001600160a01b03851680614e13565b614f45565b5f80805f19848609848602925082811083820303915050805f03614e3c575060401c9050612aeb565b80600160401b11614e4b575f5ffd5b5f600160401b85870980840360401c9310909103600160c01b0291909117949350505050565b5f80805f19848609848602925082811083820303915050805f03614e9a575060c01c9050612aeb565b80600160c01b11614ea9575f5ffd5b5f600160c01b85870980840360c01c9310909103600160401b0291909117949350505050565b5f80805f19848609848602925082811083820303915050805f03614ef8575060801c9050612aeb565b80600160801b11614f07575f5ffd5b5f600160801b85870980840360801c9310909103600160801b0291909117949350505050565b5f614f388383614e71565b90505f600160c01b614ca0565b5f614f508383614ecf565b90505f600160801b614ca0565b60405180604001604052806002906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180608001604052806004905b614fb0614f5d565b815260200190600190039081614fa85790505090565b6001600160a01b0381168114614fda575f5ffd5b50565b5f5f60408385031215614fee575f5ffd5b8235614ff981614fc6565b946020939093013593505050565b6001600160a01b03169052565b8060020b8114614fda575f5ffd5b803561502d81614fc6565b6001600160a01b03168252602081013561504681614fc6565b6001600160a01b03166020830152604081013562ffffff811680821461506a575f5ffd5b604084015250606081013561507e81615014565b60020b6060830152608081013561509481614fc6565b6001600160a01b03166080929092019190915250565b60a08101612aeb8284615022565b8015158114614fda575f5ffd5b5f5f83601f8401126150d5575f5ffd5b5081356001600160401b038111156150eb575f5ffd5b6020830191508360208260051b8501011115613b9d575f5ffd5b5f5f5f5f60608587031215615118575f5ffd5b843561512381614fc6565b93506020850135615133816150b8565b925060408501356001600160401b0381111561514d575f5ffd5b615159878288016150c5565b95989497509550505050565b5f8151808452602084019350602083015f5b828110156151bc578151865f5b60028110156151a3578251825260209283019290910190600101615184565b5050506040959095019460209190910190600101615177565b5093949350505050565b838152826020820152606060408201525f6151e46060830184615165565b95945050505050565b6001600160a01b0391909116815260200190565b5f5f5f5f5f5f5f60a0888a031215615217575f5ffd5b87356001600160401b0381111561522c575f5ffd5b6152388a828b016150c5565b90985096505060208801356001600160401b03811115615256575f5ffd5b6152628a828b016150c5565b909650945050604088013561527681615014565b9250606088013561528681615014565b91506080880135615296816150b8565b8091505092959891949750929550565b5f5f604083850312156152b7575f5ffd5b50508035926020909101359150565b5f5f5f5f606085870312156152d9575f5ffd5b84356152e481614fc6565b935060208501356001600160401b038111156152fe575f5ffd5b61530a878288016150c5565b909450925050604085013561531e816150b8565b939692955090935050565b6001600160801b0381168114614fda575f5ffd5b6001600160401b0381168114614fda575f5ffd5b5f5f5f5f5f5f5f60c0888a031215615367575f5ffd5b87356001600160401b0381111561537c575f5ffd5b6153888a828b016150c5565b909850965050602088013561539c81615329565b945060408801356153ac8161533d565b935060608801356153bc81615014565b925060808801356153cc81615014565b915060a0880135615296816150b8565b5f5f602083850312156153ed575f5ffd5b82356001600160401b03811115615402575f5ffd5b61540e858286016150c5565b90969095509350505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561549257603f19878603018452815180518087528060208301602089015e5f602082890101526020601f19601f83011688010196505050602082019150602084019350600181019050615440565b50929695505050505050565b5f5f5f5f5f5f5f60a0888a0312156154b4575f5ffd5b87356154bf81614fc6565b96506020880135955060408801356001600160401b038111156154e0575f5ffd5b6154ec8a828b016150c5565b90965094505060608801356001600160401b0381111561550a575f5ffd5b6155168a828b016150c5565b989b979a50959894979596608090950135949350505050565b5f5f5f5f5f60808688031215615543575f5ffd5b85356001600160401b03811115615558575f5ffd5b615564888289016150c5565b909650945050602086013561557881614fc6565b925060408601359150606086013561558f816150b8565b809150509295509295909350565b5f602082840312156155ad575f5ffd5b8135612d0681614fc6565b5f5f5f5f5f606086880312156155cc575f5ffd5b85356001600160401b038111156155e1575f5ffd5b6155ed888289016150c5565b909650945050602086013561560181614fc6565b925060408601356001600160401b0381111561561b575f5ffd5b615627888289016150c5565b969995985093965092949392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561567457615674615638565b604052919050565b5f5f5f5f5f60a08688031215615690575f5ffd5b853561569b81614fc6565b945060208601356156ab81614fc6565b9350604086013592506060860135915060808601356001600160401b038111156156d3575f5ffd5b8601601f810188136156e3575f5ffd5b80356001600160401b038111156156fc576156fc615638565b61570f601f8201601f191660200161564c565b818152896020838501011115615723575f5ffd5b816020840160208301375f602083830101528093505050509295509295909350565b5f5f5f5f5f5f60a0878903121561575a575f5ffd5b8635955060208701356001600160401b03811115615776575f5ffd5b61578289828a016150c5565b909650945050604087013561579681615014565b925060608701356157a681615014565b915060808701356157b6816150b8565b809150509295509295509295565b5f5f5f5f5f5f5f60e0888a0312156157da575f5ffd5b87516157e581615014565b60208901519097506157f681615014565b604089015190965061580781615014565b606089015190955061581881615014565b608089015160a08a015160c08b0151929650909450925061529681615329565b5f60208284031215615848575f5ffd5b5051919050565b805161ffff811681146122ca575f5ffd5b5f5f5f5f5f5f5f60e0888a031215615876575f5ffd5b875161588181614fc6565b602089015190975061589281615014565b95506158a06040890161584f565b94506158ae6060890161584f565b93506158bc6080890161584f565b925060a088015160ff811681146158d1575f5ffd5b60c0890151909250615296816150b8565b6001600160a01b039290921682521515602082015260400190565b5f6020828403121561590d575f5ffd5b8151612d06816150b8565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112615941575f5ffd5b8301803591506001600160401b0382111561595a575f5ffd5b602001915036819003821315613b9d575f5ffd5b818382375f9101908152919050565b6001600160a01b03929092168252602082015260400190565b5f5f5f5f608085870312156159a9575f5ffd5b84516159b481615014565b60208601519094506159c581615014565b60408601519093506159d681615014565b6060959095015193969295505050565b634e487b7160e01b5f52601160045260245ffd5b600282810b9082900b03627fffff198112627fffff82131715612aeb57612aeb6159e6565b600281810b9083900b01627fffff8113627fffff1982121715612aeb57612aeb6159e6565b6001600160a01b039586168152602081019490945260029290920b604084015283166060830152909116608082015260a00190565b6001600160a01b039384168152919092166020820152600f9190910b604082015260600190565b9687526001600160a01b039590951660208701526040860193909352600291820b6060860152810b60808501520b60a083015260c082015260e00190565b5f5f60408385031215615aef575f5ffd5b8251615afa81615329565b6020840151909250615b0b81615329565b809150509250929050565b634e487b7160e01b5f52601260045260245ffd5b6001600160a01b03959095168552600f93840b602086015291830b6040850152820b6060840152900b608082015260a00190565b5f60208284031215615b6e575f5ffd5b815180600f0b8114612d06575f5ffd5b60e893841b81529190921b6003820152600681019190915260260190565b60018060a01b03861681528460020b602082015260a060408201525f615bc560a0830186615165565b6001600160801b03948516606084015292909316608090910152949350505050565b5f5f60408385031215615bf8575f5ffd5b505080516020909101519092909150565b5f8151808452602084019350602083015f5b828110156151bc578151865f5b6004811015615c47578251825260209283019290910190600101615c28565b5050506080959095019460209190910190600101615c1b565b6001600160a01b0389168152610100602080830182905289519183018290525f91908a0190610120840190835b81811015615cab578351835260209384019390920191600101615c8d565b50508381036040850152615cbf818b615c09565b92505050866060830152615cd66080830187615007565b615ce360a0830186615007565b615cf060c0830185615007565b8260e08301529998505050505050505050565b5f5f60408385031215615d14575f5ffd5b8251615d1f81615014565b6020939093015192949293505050565b5f60208284031215615d3f575f5ffd5b8151612d068161533d565b5f600160ff1b8201615d5e57615d5e6159e6565b505f0390565b6001600160801b038316815260a0810160208201835f5b6004811015612d02578151835260209283019290910190600101615d7b565b8082028115828204841417612aeb57612aeb6159e6565b5f60208284031215615dc1575f5ffd5b8151612d0681615014565b6101208101615ddb8288615022565b60a08201959095526001600160801b039390931660c0840152600291820b60e0840152900b61010090910152919050565b5f5f60a08385031215615e1d575f5ffd5b83601f840112615e2b575f5ffd5b604051608081016001600160401b0381118282101715615e4d57615e4d615638565b604052806080850186811115615e61575f5ffd5b855b81811015615e7b578051835260209283019201615e63565b50519196919550909350505050565b60ff8181168382160190811115612aeb57612aeb6159e6565b5f8260020b8260020b028060020b9150808214610b7557610b756159e6565b5f8160020b8360020b80615ee457634e487b7160e01b5f52601260045260245ffd5b627fffff1982145f1982141615615efd57615efd6159e6565b90059392505050565b62ffffff8181168382160290811690818114610b7557610b756159e6565b6001600160a01b03959095168552600f93840b602086015291830b604085015290910b60608301521515608082015260a00190565b5f5f60408385031215615f6a575f5ffd5b825163ffffffff81168114615afa575f5ffd5b6001600160801b038181168382160290811690818114610b7557610b756159e6565b80820180821115612aeb57612aeb6159e656fea26469706673582212200c4e2aae5364795da85da3ef9025f63cd6b0ad29adf432061e4e55389981f55164736f6c634300081c00330000000000000000000000000000000000000aabbcfca8100a9ee78124e97b33000000000000000000000000000000000004444c5dc75cb358380d2e3de08a90000000000000000000000000b361194cfe6312ee3210d53c15aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000646112e8ac00000000000000000000000082bf455e9ebd6a541ef10b683de1edcaf05ce7a182bf455e9ebd6a541ef10b683de1edcaf05ce7a1b81b7c699a4c5100e5606bc5000000000000000000000000000000000000000000000000000000000000001d00000000000000b361194cfe6312ee3210d53c15aa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005be461ff715f82bf455e9ebd6a541ef10b683de1edcaf05ce7a1b81b7c699a4c5100e5606bc500000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000005b7c610100604052348015610010575f5ffd5b50604051615afc380380615afc83398101604081905261002f9161004e565b6001600160a01b0390931660805260a09190915260c05260e052610095565b5f5f5f5f60808587031215610061575f5ffd5b84516001600160a01b0381168114610077575f5ffd5b60208601516040870151606090970151919890975090945092505050565b60805160a05160c05160e0516159af61014d5f395f8181610b0901528181610c3b01528181610fad015261106601525f8181610c6e015261109901525f8181610ae501528181610c1701528181610f89015261104201525f8181610728015281816107a601528181610934015281816114ac01528181612015015281816124d3015281816125c4015281816126c3015281816127c1015281816128b501528181613adc01528181613e280152613eb301526159af5ff3fe608060405234801561000f575f5ffd5b5060043610610148575f3560e01c80634e1273f4116100c7578063ac9650d81161007d578063e985e9c511610063578063e985e9c51461058b578063f242432a146105b8578063f2aabadc146105c6575f5ffd5b8063ac9650d81461052e578063db620f4f1461054e575f5ffd5b806391dd7346116100ad57806391dd7346146104cf5780639c6b88a8146104ef578063a22cb4651461051b575f5ffd5b80634e1273f41461048e5780635d95f1d2146104ae575f5ffd5b80632eb2c2d61161011c578063441f29de11610102578063441f29de146103df5780634816a561146103f25780634b27277114610405575f5ffd5b80632eb2c2d6146103935780633cc496b7146103a3575f5ffd5b8062fdd58e1461014c57806301ffc9a71461018657806311e669dd146101a95780631bb9a94e146102a8575b5f5ffd5b61017361015a366004614712565b5f60208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b610199610194366004614769565b6105d9565b604051901515815260200161017d565b61028e6101b7366004614784565b5f90815260026020818152604092839020835160a08101855290546fffffffffffffffffffffffffffffffff81168252700100000000000000000000000000000000810467ffffffffffffffff169282019290925278010000000000000000000000000000000000000000000000008204830b9381018490527b01000000000000000000000000000000000000000000000000000000820490920b606083018190527e0100000000000000000000000000000000000000000000000000000000000090910460ff1615156080909201919091529091565b60408051600293840b81529190920b60208201520161017d565b6103866102b636600461479b565b6040805160a0810182525f808252602082018190529181018290526060810182905260808101919091525067ffffffffffffffff165f90815260036020908152604091829020825160a081018452815473ffffffffffffffffffffffffffffffffffffffff908116825260018301548082169483019490945262ffffff740100000000000000000000000000000000000000008504169482019490945277010000000000000000000000000000000000000000000000909204600290810b60608401520154909116608082015290565b60405161017d91906147c2565b6103a16101483660046148c4565b005b6103b66103b1366004614995565b610671565b604080516fffffffffffffffffffffffffffffffff93841681529290911660208301520161017d565b6103a16103ed366004614a1c565b610913565b6103a1610400366004614a1c565b610e3b565b610173610413366004614a36565b6040805160208082019790975260609590951b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001685820152605485019390935260e891821b6074850152901b60778301528051605a818403018152607a90920181528151918301919091205f908152600490925290205490565b6104a161049c366004614a91565b61126b565b60405161017d9190614afd565b6104c16104bc366004614b5e565b611374565b60405161017d929190614bb3565b6104e26104dd366004614bea565b611492565b60405161017d9190614c75565b6105026104fd366004614a1c565b61156c565b60405167ffffffffffffffff909116815260200161017d565b6103a1610529366004614c96565b6115b6565b61054161053c366004614cc9565b61164c565b60405161017d9190614cfc565b61050261055c366004614784565b5f90815260026020526040902054700100000000000000000000000000000000900467ffffffffffffffff1690565b610199610599366004614d7d565b600160209081525f928352604080842090915290825290205460ff1681565b6103a1610148366004614db4565b6104c16105d4366004614b5e565b61175a565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061066b57507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6040805160208082018a9052606089901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016828401526054820188905260e887811b607484015286901b60778301528251605a818403018152607a90920183528151918101919091205f81815260049092529181205490918291829080627fffff600289900b12801561071657506fffffffffffffffffffffffffffffffff811615155b156108c7575f8d8b8b8b8885806107507f000000000000000000000000000000000000000000000000000000000000000088868989611858565b6040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b16602082015260e889811b603483015288901b6037820152603a810186905291935091505f9081906107e6907f0000000000000000000000000000000000000000000000000000000000000000908b90605a01604051602081830303815290604052805190602001206118e3565b9150915061086561080b8285038d6fffffffffffffffffffffffffffffffff166119c2565b6108298487038e6fffffffffffffffffffffffffffffffff166119c2565b6fffffffffffffffffffffffffffffffff169060801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000160190565b99505050505050505050505f5f61087c8584611a66565b5f898152600560209081526040808320546006909252909120549294509092506108a891849084611bf8565b909250905060018a146108bb57806108bd565b815b95505050506108f4565b866001146108e2575f848152600660205260409020546108f1565b5f848152600560205260409020545b92505b826108ff8460801c90565b955095505050505097509795505050505050565b5f61092d61092636849003840184614f51565b60a0902090565b90506109597f000000000000000000000000000000000000000000000000000000000000000082611db9565b73ffffffffffffffffffffffffffffffffffffffff165f036109a7576040517f4f361fe400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f818152600260205260409020547e01000000000000000000000000000000000000000000000000000000000000900460ff16156109e3575050565b5f610a15826109f86080860160608701614f6b565b60301b68ffffff0000000000001665ffffffffffff919091160190565b90505b67ffffffffffffffff81165f9081526003602052604090206001015477010000000000000000000000000000000000000000000000900460020b15610a76576001810165ffffffffffff1667ffff0000000000008216019050610a18565b67ffffffffffffffff81165f9081526003602052604090208390610a9a8282614f86565b505f9050610ad9610ab16080860160608701614f6b565b620d89e88181046002029190061515016001016fffffffffffffffffffffffffffffffff0490565b90505f80610be0610bb87f00000000000000000000000000000000000000000000000000000000000000006127107f0000000000000000000000000000000000000000000000000000000000000000610b3860408c0160208d016150ff565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b80573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ba4919061511a565b0281610bb257610bb2615131565b04611e75565b610bc86080890160608a01614f6b565b856fffffffffffffffffffffffffffffffff16611e8c565b5f9081039250610c9d90610bf760208901896150ff565b73ffffffffffffffffffffffffffffffffffffffff1614610c6c57610c677f00000000000000000000000000000000000000000000000000000000000000006127107f0000000000000000000000000000000000000000000000000000000000000000610b3860208c018c6150ff565b610bb8565b7f0000000000000000000000000000000000000000000000000000000000000000610bc86080890160608a01614f6b565b90506040518060a00160405280846fffffffffffffffffffffffffffffffff1681526020018567ffffffffffffffff1681526020018360020b81526020018260020b81526020016001151581525060025f8781526020019081526020015f205f820151815f015f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506020820151815f0160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506040820151815f0160186101000a81548162ffffff021916908360020b62ffffff1602179055506060820151815f01601b6101000a81548162ffffff021916908360020b62ffffff1602179055506080820151815f01601e6101000a81548160ff021916908315150217905550905050847f51df08f8c72b1c39e9165f0d55509797c87b8211565107856e59ae0c0ef740b5858484604051610e2b9392919067ffffffffffffffff939093168352600291820b6020840152900b604082015260600190565b60405180910390a2505050505050565b5f610e4e61092636849003840184614f51565b5f81815260026020818152604092839020835160a08101855290546fffffffffffffffffffffffffffffffff81168252700100000000000000000000000000000000810467ffffffffffffffff169282019290925278010000000000000000000000000000000000000000000000008204830b938101939093527b01000000000000000000000000000000000000000000000000000000810490910b60608301527e01000000000000000000000000000000000000000000000000000000000000900460ff1615156080820181905291925090610f57576040517f486aa30700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6030826020015167ffffffffffffffff16901c90505f825f015190505f5f611002856040015160020b610ff8610fdf7f00000000000000000000000000000000000000000000000000000000000000006127107f00000000000000000000000000000000000000000000000000000000000000008d6020016020810190610b3891906150ff565b87876fffffffffffffffffffffffffffffffff16611e8c565b5f0360020b611ef8565b60608601519092506110d99060020b6110d15f61102260208c018c6150ff565b73ffffffffffffffffffffffffffffffffffffffff1614611097576110927f00000000000000000000000000000000000000000000000000000000000000006127107f0000000000000000000000000000000000000000000000000000000000000000610b3860208f018f6150ff565b610fdf565b7f000000000000000000000000000000000000000000000000000000000000000087876fffffffffffffffffffffffffffffffff16611e8c565b60020b611f06565b90506040518060a00160405280846fffffffffffffffffffffffffffffffff168152602001866020015167ffffffffffffffff1681526020018360020b81526020018260020b81526020018660800151151581525060025f8881526020019081526020015f205f820151815f015f6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506020820151815f0160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506040820151815f0160186101000a81548162ffffff021916908360020b62ffffff1602179055506060820151815f01601b6101000a81548162ffffff021916908360020b62ffffff1602179055506080820151815f01601e6101000a81548160ff021916908315150217905550905050857fd4564aab6e4f5325a1d0fc8d17f8f2a148f5331b077408619531b48d1ac90f2b838360405161125a929190600292830b8152910b602082015260400190565b60405180910390a250505050505050565b60608367ffffffffffffffff81111561128657611286614e2b565b6040519080825280602002602001820160405280156112af578160200160208202803683370190505b5090505f5b8481101561136b575f5f8787848181106112d0576112d061515e565b90506020020160208101906112e591906150ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8585848181106113315761133161515e565b9050602002013581526020019081526020015f20548282815181106113585761135861515e565b60209081029190910101526001016112b4565b50949350505050565b61137c6146d0565b5f681face81baddeadbeef805c159030905d806113fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e43590000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6114173388886fffffffffffffffffffffffffffffffff16611f14565b6040516fffffffffffffffffffffffffffffffff87168152879033907f23833bcc608a225445893342669a9bc035de4ef96cc1edd47cead470f1f7817a9060200160405180910390a3611477888686896114708c611fb0565b600161200a565b925092505f681face81baddeadbeef5d509550959350505050565b60603373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611503576040517f3e30718a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808080808080611516898b018b61518b565b96509650965096509650965096505f5f61153589898989898989612119565b91509150818160405160200161154c929190614bb3565b604051602081830303815290604052995050505050505050505092915050565b5f60028161158261092636869003860186614f51565b815260208101919091526040015f2054700100000000000000000000000000000000900467ffffffffffffffff1692915050565b335f81815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60608167ffffffffffffffff81111561166757611667614e2b565b60405190808252806020026020018201604052801561169a57816020015b60608152602001906001900390816116855790505b5090505f5b82811015611753575f80308686858181106116bc576116bc61515e565b90506020028101906116ce9190615210565b6040516116dc929190615271565b5f60405180830381855af49150503d805f8114611714576040519150601f19603f3d011682016040523d82523d5f602084013e611719565b606091505b50915091508161172b57805160208201fd5b8084848151811061173e5761173e61515e565b6020908102919091010152505060010161169f565b5092915050565b6117626146d0565b5f681face81baddeadbeef805c159030905d806117db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e43590000000000000000000000000000000000000000000060448201526064016113f1565b6117f83388886fffffffffffffffffffffffffffffffff1661294b565b6040516fffffffffffffffffffffffffffffffff87168152879033907f16695fc037c20a8984b20ffc7aadd6ce10e62756f9ca42933a1aa6459ef064ca9060200160405180910390a361184a87612ae2565b611477888686898b5f61200a565b5f5f5f5f611867898988612e97565b915091505f5f6118788b8b89612e97565b915091508760020b8960020b121561189957818403955080830394506118d5565b8660020b8960020b126118b557838203955082810394506118d5565b5f5f6118c18d8d612f85565b908790038590039850859003839003965050505b505050509550959350505050565b5f5f5f6118f08585612ffe565b6040517f35fd631a00000000000000000000000000000000000000000000000000000000815260048101829052600360248201529091505f9073ffffffffffffffffffffffffffffffffffffffff8816906335fd631a906044015f60405180830381865afa158015611964573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526119a99190810190615280565b6040810151606090910151909890975095505050505050565b5f80807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848609848602925082811083820303915050805f03611a0a575060801c905061066b565b8070010000000000000000000000000000000011611a26575f5ffd5b5f70010000000000000000000000000000000085870980840360801c93109091037001000000000000000000000000000000000291909117949350505050565b5f5f5f611a738560801c90565b6fffffffffffffffffffffffffffffffff908116915085168082015f808781608082901c9050611ac4826fffffffffffffffffffffffffffffffff168668010000000000000000026002890a61304f565b9350611af1816fffffffffffffffffffffffffffffffff168668010000000000000000026002890a61304f565b92505f9150819050600487048601611b12611b0d86838961304f565b613118565b9250611b22611b0d85838961304f565b9150611b646fffffffffffffffffffffffffffffffff84168360801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000160190565b99505f925082915081905060046002890a048887026002880a03019050611b92611b0d868360028a0a61304f565b9250611ba5611b0d858360028a0a61304f565b9150611be76fffffffffffffffffffffffffffffffff84168360801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000160190565b985050505050505050509250929050565b5f8080611c30865b6fffffffffffffffffffffffffffffffff16885b6fffffffffffffffffffffffffffffffff16611b0d919061534e565b90505f611c5c611c408860801c90565b6fffffffffffffffffffffffffffffffff16611c148a60801c90565b90505f611c6886611c00565b90505f611c78611c408860801c90565b90505f6fffffffffffffffffffffffffffffffff8581161480611cac57506fffffffffffffffffffffffffffffffff838116145b1590505f6fffffffffffffffffffffffffffffffff8581161480611ce157506fffffffffffffffffffffffffffffffff838116145b159050611d4581611cfb57611cf68d60801c90565b611cfd565b855b83611d08578d610829565b876fffffffffffffffffffffffffffffffff169060801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000160190565b611da682611d5c57611d578c60801c90565b611d5e565b845b84611d69578c610829565b866fffffffffffffffffffffffffffffffff169060801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000160190565b9750975050505050505094509492505050565b5f5f611dc48361314a565b6040517f1e2eaeaf000000000000000000000000000000000000000000000000000000008152600481018290529091505f9073ffffffffffffffffffffffffffffffffffffffff861690631e2eaeaf90602401602060405180830381865afa158015611e32573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e56919061511a565b73ffffffffffffffffffffffffffffffffffffffff1695945050505050565b5f818311611e835781611e85565b825b9392505050565b5f611ef0611ee9857c01000000000000000000000000000000000000000000000000000000006c01000000000000000000000000611ec988613186565b0373ffffffffffffffffffffffffffffffffffffffff16860260806134e6565b600d6135d6565b949350505050565b5f818312611e835781611e85565b5f818313611e835781611e85565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526020818152604080832085845290915281208054839290611f51908490615361565b909155505060408051838152602081018390525f9173ffffffffffffffffffffffffffffffffffffffff86169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000611fdb836136f0565b6004036030027b01000000000001000000000001000000000001000000000000000000901c1682189050919050565b6120126146d0565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166348c89491338a8a8a8a8a8a60405160200161206c9796959493929190615374565b6040516020818303038152906040526040518263ffffffff1660e01b81526004016120979190614c75565b5f604051808303815f875af11580156120b2573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526120f79190810190615481565b80602001905181019061210a9190615533565b91509150965096945050505050565b6121216146d0565b5f5f5f5f5f5f60025f6121358f60a0902090565b815260208082019290925260409081015f20815160a08101835290546fffffffffffffffffffffffffffffffff8116825267ffffffffffffffff7001000000000000000000000000000000008204811694830185905278010000000000000000000000000000000000000000000000008204600290810b948401949094527b01000000000000000000000000000000000000000000000000000000820490930b606083015260ff7e01000000000000000000000000000000000000000000000000000000000000909104161515608082015292508a161415806122245750602081015167ffffffffffffffff16155b1561225d576040517f93db02630000000000000000000000000000000000000000000000000000000081525f60048201526024016113f1565b5f5b6122688a6136f0565b8110156123eb578e8e5f8d61227e8e868361372a565b9150508b6123215761ffff60308e901c1660e882901c60d083901c6122a383836155b2565b60020b1515806122be57506122b883826155b2565b60020b15155b806122d25750876040015160020b8260020b125b806122e65750876060015160020b8160020b135b1561231d576040517f1577d96600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505b61232a81613795565b8901985061233781613837565b909701965f8d8d61234c8686848a888661388c565b8f896004811061235e5761235e61515e565b6020020152925061236f8d84613cad565b9c506123928e88600481106123865761238661515e565b60200201518a90613d76565b98506123d86123a18389613de1565b156123be576fffffffffffffffffffffffffffffffff84166123d1565b6123d16123cb8560801d90565b60801b90565b8b90613cad565b995086600101965050505050505061225f565b50612409905060046f7fffffffffffffffffffffffffffffff6155d3565b6fffffffffffffffffffffffffffffffff16841180612453575061243e60046f7fffffffffffffffffffffffffffffff6155d3565b6fffffffffffffffffffffffffffffffff1683115b1561248a576040517f543a6e1000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8960020b8b60020b13156124b95781156124b5576124b26124ab8d84613df7565b8690613cad565b94505b9899985b5f6124c48683613fe4565b90505f81600f0b13156125b7577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f5298aca8f8f5f01516125198590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526fffffffffffffffffffffffffffffffff1660448201526064015f604051808303815f87803b15801561259c575f5ffd5b505af11580156125ae573d5f5f3e3d5ffd5b505050506126ad565b5f81600f0b12156126ad577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663156e29f68f8f5f015161260a8590565b61261390615621565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526fffffffffffffffffffffffffffffffff1660448201526064015f604051808303815f87803b158015612696575f5ffd5b505af11580156126a8573d5f5f3e3d5ffd5b505050505b5f6126b88260801d90565b600f0b13156127ab577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f5298aca8f8f6020015161270d8560801d90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526fffffffffffffffffffffffffffffffff1660448201526064015f604051808303815f87803b158015612790575f5ffd5b505af11580156127a2573d5f5f3e3d5ffd5b505050506128ae565b5f6127b68260801d90565b600f0b12156128ae577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663156e29f68f8f6020015161280b8560801d90565b61281490615621565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526fffffffffffffffffffffffffffffffff1660448201526064015f604051808303815f87803b158015612897575f5ffd5b505af11580156128a9573d5f5f3e3d5ffd5b505050505b8c5f6128e47f00000000000000000000000000000000000000000000000000000000000000006128df8460a0902090565b61407b565b90508c60020b8160020b12158061290157508d60020b8160020b13155b15612938576040517ffd26c92800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505097509795505050505050565b73ffffffffffffffffffffffffffffffffffffffff83165f818152602081815260408083208684528252808320805486019055805186815291820185905233917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a473ffffffffffffffffffffffffffffffffffffffff83163b15612add576040517ff23a6e61000000000000000000000000000000000000000000000000000000008082523360048301525f60248301819052604483018590526064830184905260a0608484015260a48301529073ffffffffffffffffffffffffffffffffffffffff85169063f23a6e619060c4016020604051808303815f875af1158015612a60573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a84919061565d565b7fffffffff000000000000000000000000000000000000000000000000000000001614612add576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b612aec815f614127565b5f03612b27576040517f93db0263000000000000000000000000000000000000000000000000000000008152600160048201526024016113f1565b77fffffffff200fffffffff200fffffffff200fffffffff200604082901c165f5b6004811015612add57612b5b8382614127565b5f03612ba5576040603082020183901c15612add576040517f93db0263000000000000000000000000000000000000000000000000000000008152600160048201526024016113f1565b5f612baf846136f0565b9050600182015b81811015612c1e578060300284901c65ffffffffffff168360300285901c65ffffffffffff1603612c16576040517f93db0263000000000000000000000000000000000000000000000000000000008152600660048201526024016113f1565b600101612bb6565b50612c298483614139565b60020b5f03612c67576040517f93db0263000000000000000000000000000000000000000000000000000000008152600560048201526024016113f1565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618612c978584603002604c011c90565b60020b1480612cb95750620d89e8612cb48584603002604c011c90565b60020b145b15612cf2576040517f93db02630000000000000000000000000000000000000000000000000000000081526004818101526024016113f1565b5f612cfd858461414c565b9050828114612e8d5782612d11868361414c565b14612d4b576040517f93db0263000000000000000000000000000000000000000000000000000000008152600360048201526024016113f1565b612d55858461415e565b612d5f868361415e565b141580612d7e5750612d718584614127565b612d7b8683614127565b14155b15612db8576040517f93db0263000000000000000000000000000000000000000000000000000000008152600360048201526024016113f1565b5f612dc38685614170565b90505f612dd08784614170565b90505f612ddd8887613de1565b90505f612dea8986613de1565b90508284148015612dfa57508082145b15612e33576040517f93db02630000000000000000000000000000000000000000000000000000000081526004818101526024016113f1565b8284141580612e425750836001145b8015612e4e5750808214155b15612e88576040517f93db0263000000000000000000000000000000000000000000000000000000008152600560048201526024016113f1565b505050505b5050600101612b48565b5f5f5f612ea48585614182565b90505f73ffffffffffffffffffffffffffffffffffffffff87166335fd631a612ece84600161534e565b60405160e083901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810191909152600260248201526044015b5f60405180830381865afa158015612f27573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612f6c9190810190615280565b6020810151604090910151909890975095505050505050565b5f5f5f612f918461314a565b90505f612f9f60018361534e565b6040517f35fd631a00000000000000000000000000000000000000000000000000000000815260048101829052600260248201529091505f9073ffffffffffffffffffffffffffffffffffffffff8816906335fd631a90604401612f0d565b5f5f6130098461314a565b90505f61301760068361534e565b60408051602081018790529081018290529091506060015b604051602081830303815290604052805190602001209250505092915050565b5f80807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709858702925082811083820303915050805f036130a2575f8411613097575f5ffd5b508290049050611e85565b8084116130ad575f5ffd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b806fffffffffffffffffffffffffffffffff8116811461314557506fffffffffffffffffffffffffffffffff5b919050565b6040515f90613169908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b5f5f5f8360020b1261319b578260020b6131a2565b8260020b5f035b9050620d89e88111156131e1576040517fce8ef7fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f816001165f0361320357700100000000000000000000000000000000613215565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615613249576ffff97272373d413259a46990580e213a0260801c5b6004821615613268576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613287576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156132a6576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156132c5576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156132e4576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613303576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613323576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613343576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615613363576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613383576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156133a3576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156133c3576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156133e3576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615613403576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613424576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613444576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615613463576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615613480576b048a170391f7dc42444e8fa20260801c5b5f8460020b13156134be57807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff816134ba576134ba615131565b0490505b6401000000008106156134d25760016134d4565b5f5b60ff16602082901c0192505050919050565b5f80807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff868809868802925082811083820303915050805f0361354c575f851161352e575f5ffd5b84820492506135438360018660020a036141ba565b92505050611ef0565b80846101000386901c1161356a5760018460020a0392505050611ef0565b5f858789095f87810388169788900497600260038a028118808b02820302808b02820302808b02820302808b02820302808b02820302808b0290910302918190038190046001018684119095039490940291909403929092049190911791909102915050949350505050565b5f5f613663847f0706060506020504060203020504030106050205030304010505030400000000601f6f8421084210842108cc6318c6db6d54be6fffffffffffffffffffffffffffffffff841160071b84811c67ffffffffffffffff1060061b1784811c63ffffffff1060051b1784811c61ffff1060041b1784811c60ff1060031b1793841c1c161a1790565b607f8190039490941b9360800360401b9050603f838103905b818111156136c657600290950a607f81901c60ff9190911c90811c9590811b909203917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0161367c565b50700100000000000000000000000000000000693627a301d786ca58a52f83020495945050505050565b5f72fe0000000000fe0000000000fe0000000000fe604083901c165b6001603083021b81106137245781600101915061370c565b50919050565b5f808061373786866141c8565b90925090505f6137478787614127565b613763906fffffffffffffffffffffffffffffffff8716615678565b905061376f878761415e565b5f0361378a576137808383836141ff565b9350505050611e85565b6137808383836142ee565b5f5f6137a96137a48460e81c90565b613186565b90505f6137b96137a48560d01c90565b905073ffffffffffffffffffffffffffffffffffffffff82166138216060866fffffffffffffffffffffffffffffffff16901b84840373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1661304f565b8161382e5761382e615131565b04949350505050565b5f5f6138466137a48460e81c90565b90505f6138566137a48560d01c90565b9050611ef0846fffffffffffffffffffffffffffffffff1683830373ffffffffffffffffffffffffffffffffffffffff1661433f565b5f5f5f61389a8860a0902090565b896138a58989613de1565b6138af8860e81c90565b6138b98960d01c90565b60405160200161391695949392919094855260609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166020850152603484019190915260e890811b60548401521b6057820152605a0190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090505f8061395a8989614170565b5f848152600460205260408120549192508190608082901c9050896fffffffffffffffffffffffffffffffff81165f036139c0576040517f1007454800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845f036139eb576139d1818461568f565b955089156139e6576139e381836156b7565b91505b613a60565b806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015613a49576040517f4323a55500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808303955089613a6057613a5d818361568f565b91505b613aa06fffffffffffffffffffffffffffffffff87168360801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000160190565b5f88815260046020526040808220929092558151608081019092528c94508f93509150819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635a6bcfda90859080613b108960e81c90565b60020b8152602001613b228960d01c90565b60020b81526020018a15613b5057613b4b6fffffffffffffffffffffffffffffffff8a166156df565b613b64565b886fffffffffffffffffffffffffffffffff165b81526020018c8152506040518363ffffffff1660e01b8152600401613b8a929190615715565b60408051808303815f875af1158015613ba5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bc991906157db565b91509150613c1a613bda83600f0b90565b613be483600f0b90565b03613c12613bf28560801d90565b613bfc8560801d90565b036fffffffffffffffffffffffffffffffff1690565b9060801b0190565b99506fffffffffffffffffffffffffffffffff851615613c9a57613c8d613c4182600f0b90565b613c63613c4e8460801d90565b6fffffffffffffffffffffffffffffffff1690565b9060801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000160190565b9850613c9a88868b6143df565b5050505050505050965096945050505050565b5f5f613cb98360801d90565b600f0b613cc68560801d90565b600f0b019050805f84600f0b86600f0b0190505f8190508383600f0b141580613cf257508181600f0b14155b15613d29576040517fd219017400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613d6b837fffffffffffffffffffffffffffffffff0000000000000000000000000000000087168388016fffffffffffffffffffffffffffffffff1601613c12565b979650505050505050565b81810182811080613daa5750826fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff16105b1561066b576040517fd219017400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60026049603084020184901c5b069392505050565b5f808083608081901d600f82900b15801590613e16575080600f0b5f14155b15613e71575f613e5c82600f0b613e577f0000000000000000000000000000000000000000000000000000000000000000613e528c60a0902090565b611db9565b614439565b83600f0b0390505f8112945080935050613e9d565b81600f0b5f14613e8e575f82600f0b12935081600f0b9250613e9d565b5f81600f0b13935080600f0b92505b825f03613eb0575f94505050505061066b565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f3cd914c896040518060600160405280891515815260200188815260200189613f265773fffd8963efd1fc6a506488495d951d5263988d25613f2d565b6401000276a45b73ffffffffffffffffffffffffffffffffffffffff168152506040518363ffffffff1660e01b8152600401613f639291906157fd565b6020604051808303815f875af1158015613f7f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fa3919061511a565b9050613fd8613fb282600f0b90565b5f03613c12613fc18460801d90565b5f036fffffffffffffffffffffffffffffffff1690565b98975050505050505050565b5f5f613ff08360801c90565b6fffffffffffffffffffffffffffffffff1661400c8560801d90565b600f0b039050805f846fffffffffffffffffffffffffffffffff1686600f0b0390505f8190508383600f0b141580613cf257508181600f0b14613d29576040517fd219017400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f6140868361314a565b6040517f1e2eaeaf000000000000000000000000000000000000000000000000000000008152600481018290529091505f9073ffffffffffffffffffffffffffffffffffffffff861690631e2eaeaf90602401602060405180830381865afa1580156140f4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614118919061511a565b60a01c60020b95945050505050565b5f60806041603084020184901c613def565b5f6110006064603084020184901c613def565b5f6004604a603084020184901c613def565b5f60026040603084020184901c613def565b5f60026048603084020184901c613def565b5f5f61418d8461314a565b90505f61419b60048361534e565b60408051600287900b602082015290810182905290915060600161302f565b5f818310611e835781611e85565b5f806141f46141dc8585603002604c011c90565b6141e68686614139565b603087901c61ffff16614518565b909590945092505050565b5f5f61420a85613186565b90505f61421685613186565b90506142e4868661427d6142788861425a8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1661433f565b88880373ffffffffffffffffffffffffffffffffffffffff1661304f565b614536565b7fffffff000000000000000000000000000000000000000000000000000000000060e884901b167cffffff000000000000000000000000000000000000000000000000000060d084901b16016fffffffffffffffffffffffffffffffff8216019392505050565b9695505050505050565b5f5f6142f985613186565b90505f61430585613186565b90506142e4868661427d614278886c0100000000000000000000000088880373ffffffffffffffffffffffffffffffffffffffff1661304f565b5f80807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848609848602925082811083820303915050805f03614387575060601c905061066b565b806c010000000000000000000000001161439f575f5ffd5b5f6c0100000000000000000000000085870980840360601c9310909103740100000000000000000000000000000000000000000291909117949350505050565b5f5f6143eb8484611a66565b5f8781526005602090815260408083205460069092529091205492945090925061441791849084611bf8565b5f96875260056020908152604080892060069092529097205590945550505050565b5f6fffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff831610156144d1575f6144b66144b161447886614582565b780100000000000000000000000000000000000000000000000060028773ffffffffffffffffffffffffffffffffffffffff160a61304f565b614596565b90505f84126144c557806144c9565b805f035b91505061066b565b5f6144b66144b16144e186614582565b70010000000000000000000000000000000061451373ffffffffffffffffffffffffffffffffffffffff8816806145f1565b61304f565b5f5f5f5f614526868661468d565b9088039897019695505050505050565b806fffffffffffffffffffffffffffffffff81168114613145576040517fb668004500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f821361459257815f0361066b565b5090565b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115614592576040517fb668004500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848609848602925082811083820303915050805f03614639575060401c905061066b565b80680100000000000000001161464d575f5ffd5b5f6801000000000000000085870980840360401c931090910378010000000000000000000000000000000000000000000000000291909117949350505050565b5f80600261469b84866158c9565b6146a591906158e8565b6146c46146b2858761595b565b62ffffff166002808204910615150190565b915091505b9250929050565b60405180608001604052806004906020820280368337509192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461470f575f5ffd5b50565b5f5f60408385031215614723575f5ffd5b823561472e816146ee565b946020939093013593505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461470f575f5ffd5b5f60208284031215614779575f5ffd5b8135611e858161473c565b5f60208284031215614794575f5ffd5b5035919050565b5f602082840312156147ab575f5ffd5b813567ffffffffffffffff81168114611e85575f5ffd5b60a0810161066b828473ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b5f5f83601f840112614855575f5ffd5b50813567ffffffffffffffff81111561486c575f5ffd5b6020830191508360208260051b85010111156146c9575f5ffd5b5f5f83601f840112614896575f5ffd5b50813567ffffffffffffffff8111156148ad575f5ffd5b6020830191508360208285010111156146c9575f5ffd5b5f5f5f5f5f5f5f5f60a0898b0312156148db575f5ffd5b88356148e6816146ee565b975060208901356148f6816146ee565b9650604089013567ffffffffffffffff811115614911575f5ffd5b61491d8b828c01614845565b909750955050606089013567ffffffffffffffff81111561493c575f5ffd5b6149488b828c01614845565b909550935050608089013567ffffffffffffffff811115614967575f5ffd5b6149738b828c01614886565b999c989b5096995094979396929594505050565b8060020b811461470f575f5ffd5b5f5f5f5f5f5f5f60e0888a0312156149ab575f5ffd5b8735965060208801356149bd816146ee565b95506040880135945060608801356149d481614987565b935060808801356149e481614987565b925060a08801356149f481614987565b96999598509396929591949193505060c09091013590565b5f60a08284031215613724575f5ffd5b5f60a08284031215614a2c575f5ffd5b611e858383614a0c565b5f5f5f5f5f60a08688031215614a4a575f5ffd5b853594506020860135614a5c816146ee565b9350604086013592506060860135614a7381614987565b91506080860135614a8381614987565b809150509295509295909350565b5f5f5f5f60408587031215614aa4575f5ffd5b843567ffffffffffffffff811115614aba575f5ffd5b614ac687828801614845565b909550935050602085013567ffffffffffffffff811115614ae5575f5ffd5b614af187828801614845565b95989497509550505050565b602080825282518282018190525f918401906040840190835b81811015614b34578351835260209384019390920191600101614b16565b509095945050505050565b80356fffffffffffffffffffffffffffffffff81168114613145575f5ffd5b5f5f5f5f5f6101208688031215614b73575f5ffd5b614b7d8787614a0c565b945060a08601359350614b9260c08701614b3f565b925060e0860135614ba281614987565b9150610100860135614a8381614987565b60a0810181845f5b6004811015614bda578151835260209283019290910190600101614bbb565b5050508260808301529392505050565b5f5f60208385031215614bfb575f5ffd5b823567ffffffffffffffff811115614c11575f5ffd5b614c1d85828601614886565b90969095509350505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f611e856020830184614c29565b80358015158114613145575f5ffd5b5f5f60408385031215614ca7575f5ffd5b8235614cb2816146ee565b9150614cc060208401614c87565b90509250929050565b5f5f60208385031215614cda575f5ffd5b823567ffffffffffffffff811115614cf0575f5ffd5b614c1d85828601614845565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015614d71577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452614d5c858351614c29565b94506020938401939190910190600101614d22565b50929695505050505050565b5f5f60408385031215614d8e575f5ffd5b8235614d99816146ee565b91506020830135614da9816146ee565b809150509250929050565b5f5f5f5f5f5f60a08789031215614dc9575f5ffd5b8635614dd4816146ee565b95506020870135614de4816146ee565b94506040870135935060608701359250608087013567ffffffffffffffff811115614e0d575f5ffd5b614e1989828a01614886565b979a9699509497509295939492505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614e9f57614e9f614e2b565b604052919050565b62ffffff8116811461470f575f5ffd5b5f60a08284031215614ec7575f5ffd5b60405160a0810167ffffffffffffffff81118282101715614eea57614eea614e2b565b6040529050808235614efb816146ee565b81526020830135614f0b816146ee565b60208201526040830135614f1e81614ea7565b60408201526060830135614f3181614987565b60608201526080830135614f44816146ee565b6080919091015292915050565b5f60a08284031215614f61575f5ffd5b611e858383614eb7565b5f60208284031215614f7b575f5ffd5b8135611e8581614987565b8135614f91816146ee565b81547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff821617825550600181016020830135614fe2816146ee565b81547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff821617825550604083013561502f81614ea7565b8154606085013561503f81614987565b8060b81b79ffffff00000000000000000000000000000000000000000000001676ffffff00000000000000000000000000000000000000008460a01b167fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff841617178455505050505f60808301356150b6816146ee565b6002830180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790559050505050565b5f6020828403121561510f575f5ffd5b8135611e85816146ee565b5f6020828403121561512a575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f5f5f5f5f5f5f610160888a0312156151a2575f5ffd5b87356151ad816146ee565b96506151bc8960208a01614eb7565b955060c08801356151cc81614987565b945060e08801356151dc81614987565b93506151eb6101008901614b3f565b925061012088013591506152026101408901614c87565b905092959891949750929550565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615243575f5ffd5b83018035915067ffffffffffffffff82111561525d575f5ffd5b6020019150368190038213156146c9575f5ffd5b818382375f9101908152919050565b5f60208284031215615290575f5ffd5b815167ffffffffffffffff8111156152a6575f5ffd5b8201601f810184136152b6575f5ffd5b805167ffffffffffffffff8111156152d0576152d0614e2b565b8060051b6152e060208201614e58565b918252602081840181019290810190878411156152fb575f5ffd5b6020850194505b83851015613d6b57845180835260209586019590935090910190615302565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561066b5761066b615321565b8181038181111561066b5761066b615321565b73ffffffffffffffffffffffffffffffffffffffff881681526101608101873561539d816146ee565b73ffffffffffffffffffffffffffffffffffffffff811660208401525060208801356153c8816146ee565b73ffffffffffffffffffffffffffffffffffffffff811660408401525060408801356153f381614ea7565b62ffffff8116606084015250606088013561540d81614987565b8060020b6080840152506080880135615425816146ee565b73ffffffffffffffffffffffffffffffffffffffff1660a0830152600287810b60c084015286900b60e08301526fffffffffffffffffffffffffffffffff851661010083015283610120830152613fd861014083018415159052565b5f60208284031215615491575f5ffd5b815167ffffffffffffffff8111156154a7575f5ffd5b8201601f810184136154b7575f5ffd5b805167ffffffffffffffff8111156154d1576154d1614e2b565b61550260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614e58565b818152856020838501011115615516575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f5f60a08385031215615544575f5ffd5b83601f840112615552575f5ffd5b6040516080810167ffffffffffffffff8111828210171561557557615575614e2b565b604052806080850186811115615589575f5ffd5b855b818110156155a357805183526020928301920161558b565b50519196919550909350505050565b5f8260020b806155c4576155c4615131565b808360020b0791505092915050565b600f82810b9082900b037fffffffffffffffffffffffffffffffff8000000000000000000000000000000081126f7fffffffffffffffffffffffffffffff8213171561066b5761066b615321565b5f81600f0b7fffffffffffffffffffffffffffffffff80000000000000000000000000000000810361565557615655615321565b5f0392915050565b5f6020828403121561566d575f5ffd5b8151611e858161473c565b808202811582820484141761066b5761066b615321565b6fffffffffffffffffffffffffffffffff818116838216019081111561066b5761066b615321565b6fffffffffffffffffffffffffffffffff828116828216039081111561066b5761066b615321565b5f7f8000000000000000000000000000000000000000000000000000000000000000820361570f5761570f615321565b505f0390565b615794818473ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b8151600290810b60a08301526020830151900b60c0820152604082015160e082015260609091015161010082015261014061012082018190525f9082015261016001919050565b5f5f604083850312156157ec575f5ffd5b505080516020909101519092909150565b61587c818473ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b8151151560a0820152602082015160c082015260409091015173ffffffffffffffffffffffffffffffffffffffff1660e082015261012061010082018190525f9082015261014001919050565b5f8260020b8260020b028060020b915080821461175357611753615321565b5f8160020b8360020b806158fe576158fe615131565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81147fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000008314161561595257615952615321565b90059392505050565b62ffffff81811683821602908116908181146117535761175361532156fea2646970667358221220cb260b3a8bb48e94d258354b0d3d559ac163933dd85d24306639de3746de8f6464736f6c634300081c0033000000000000000000000000000000000004444c5dc75cb358380d2e3de08a90000000000000000000000000000000000000000000000071d75ab9b920500000000000000000000000000000000000000000000000000071d75ab9b920500000000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c30ab48143b69330c377002cfdd434eb329272006d9fb83134174db8f3d3dab6922fd427e39d1b1b7cb9759767033b1dcd1394e9b75502b5d1ae1cad35645e19cb1c8d17665e6055e5d762f937959c79aa11466de77da58a224eeac167393706432c33910514ba68180cbb2c86eca562019ab75b86ab86f3c1bbf8ef5fe844cf4ca81b761f5550f890b21bec040c63ed5f6df78520281c475e09c39f1b171fe468d6a86032c6099cfd91cfa0617b837313d51a59f618f403699a310d71bc47515fc4f81c0000000000000000000000000000000000000000000000000000000000