0x608060405234801561001057600080fd5b50611b38806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80631f931c1c14610030575b600080fd5b61004361003e366004611497565b610045565b005b61004d61009e565b61009761005a8587611614565b8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061016e92505050565b5050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6004015473ffffffffffffffffffffffffffffffffffffffff16331461016c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b565b60005b835181101561035a57600084828151811061018e5761018e611770565b6020026020010151602001519050600060028111156101af576101af61179f565b8160028111156101c1576101c161179f565b0361020f5761020a8583815181106101db576101db611770565b6020026020010151600001518684815181106101f9576101f9611770565b6020026020010151604001516103a5565b610351565b60018160028111156102235761022361179f565b0361026c5761020a85838151811061023d5761023d611770565b60200260200101516000015186848151811061025b5761025b611770565b60200260200101516040015161074d565b60028160028111156102805761028061179f565b036102c95761020a85838151811061029a5761029a611770565b6020026020010151600001518684815181106102b8576102b8611770565b602002602001015160400151610b05565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560448201527f74416374696f6e000000000000000000000000000000000000000000000000006064820152608401610163565b50600101610171565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161038e9392919061183c565b60405180910390a16103a08282610ced565b505050565b6000815111610436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f206375740000000000000000000000000000000000000000006064820152608401610163565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff83166104fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f65206164647265737328302900000000000000000000000000000000000000006064820152608401610163565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600182016020526040812054906bffffffffffffffffffffffff82169003610542576105428285610de6565b60005b835181101561009757600084828151811061056257610562611770565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff168015610647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c72656164792065786973747300000000000000000000006064820152608401610163565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff0000000000000000000000000000000000000000161790558361073c816119d6565b945050600190920191506105459050565b60008151116107de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f206375740000000000000000000000000000000000000000006064820152608401610163565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff83166108a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f65206164647265737328302900000000000000000000000000000000000000006064820152608401610163565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600182016020526040812054906bffffffffffffffffffffffff821690036108ea576108ea8285610de6565b60005b835181101561009757600084828151811061090a5761090a611770565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff90811690871681036109f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e00000000000000006064820152608401610163565b6109ff858284610e75565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905583610af4816119d6565b945050600190920191506108ed9050565b6000815111610b96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f206375740000000000000000000000000000000000000000006064820152608401610163565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff831615610c5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d7573742062652061646472657373283029000000000000000000006064820152608401610163565b60005b8251811015610ce7576000838281518110610c7b57610c7b611770565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff16610cdd848284610e75565b5050600101610c5e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216610d0c575050565b610d2e82604051806060016040528060288152602001611ab7602891396113ea565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610d569190611a01565b600060405180830381855af49150503d8060008114610d91576040519150601f19603f3d011682016040523d82523d6000602084013e610d96565b606091505b509150915081610ce757805115610db05780518082602001fd5b83836040517f192105d7000000000000000000000000000000000000000000000000000000008152600401610163929190611a1d565b610e0881604051806060016040528060248152602001611adf602491396113ea565b60028201805473ffffffffffffffffffffffffffffffffffffffff90921660008181526001948501602090815260408220860185905594840183559182529290200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b73ffffffffffffffffffffffffffffffffffffffff8216610f18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e27742065786973740000000000000000006064820152608401610163565b3073ffffffffffffffffffffffffffffffffffffffff831603610fbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201527f7461626c652066756e6374696f6e0000000000000000000000000000000000006064820152608401610163565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152602084815260408083205473ffffffffffffffffffffffffffffffffffffffff86168452600180880190935290832054740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff16929161104791611a54565b905080821461118e5773ffffffffffffffffffffffffffffffffffffffff84166000908152600186016020526040812080548390811061108957611089611770565b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8916845260018a019091526040909220805460079092166004026101000a90920460e01b9250829190859081106110e7576110e7611770565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff0000000000000000000000000000000000000000000000000000000092909216825286905260409020805473ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000006bffffffffffffffffffffffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff8416600090815260018601602052604090208054806111c4576111c4611a6d565b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff00000000000000000000000000000000000000000000000000000000851682528690526040812081905581900361009757600285015460009061125d90600190611a54565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260018089016020526040909120015490915080821461134b5760008760020183815481106112a9576112a9611770565b60009182526020909120015460028901805473ffffffffffffffffffffffffffffffffffffffff90921692508291849081106112e7576112e7611770565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055929091168152600189810190925260409020018190555b8660020180548061135e5761135e611a6d565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff88168252600189810190915260408220015550505050505050565b813b8181610ce7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101639190611a9c565b803573ffffffffffffffffffffffffffffffffffffffff8116811461144957600080fd5b919050565b60008083601f84011261146057600080fd5b50813567ffffffffffffffff81111561147857600080fd5b60208301915083602082850101111561149057600080fd5b9250929050565b6000806000806000606086880312156114af57600080fd5b853567ffffffffffffffff808211156114c757600080fd5b818801915088601f8301126114db57600080fd5b8135818111156114ea57600080fd5b8960208260051b85010111156114ff57600080fd5b6020830197508096505061151560208901611425565b9450604088013591508082111561152b57600080fd5b506115388882890161144e565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561159b5761159b611549565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156115e8576115e8611549565b604052919050565b600067ffffffffffffffff82111561160a5761160a611549565b5060051b60200190565b6000611627611622846115f0565b6115a1565b83815260208082019190600586811b86013681111561164557600080fd5b865b8181101561176357803567ffffffffffffffff808211156116685760008081fd5b818a0191506060823603121561167e5760008081fd5b611686611578565b61168f83611425565b815286830135600381106116a35760008081fd5b81880152604083810135838111156116bb5760008081fd5b939093019236601f8501126116d257600092508283fd5b833592506116e2611622846115f0565b83815292871b840188019288810190368511156116ff5760008081fd5b948901945b8486101561174c5785357fffffffff000000000000000000000000000000000000000000000000000000008116811461173d5760008081fd5b82529489019490890190611704565b918301919091525088525050948301948301611647565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60005b838110156117e95781810151838201526020016117d1565b50506000910152565b6000815180845261180a8160208601602086016117ce565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006060808301606084528087518083526080925060808601915060808160051b8701016020808b0160005b8481101561196a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8503018652815188850173ffffffffffffffffffffffffffffffffffffffff825116865284820151600381106118f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b808310156119555783517fffffffff00000000000000000000000000000000000000000000000000000000168252928601926001929092019190860190611913565b50978501979550505090820190600101611868565b505073ffffffffffffffffffffffffffffffffffffffff8a1690880152868103604088015261199981896117f2565b9a9950505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006bffffffffffffffffffffffff8083168181036119f7576119f76119a7565b6001019392505050565b60008251611a138184602087016117ce565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000611a4c60408301846117f2565b949350505050565b81810381811115611a6757611a676119a7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b602081526000611aaf60208301846117f2565b939250505056fe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a2646970667358221220abfe79a9fa9ed754972de9460fdceef0f0c56c67b7c496d976e854ed2cda321764736f6c63430008180033