60806040526000600d556000600e556005600f55620557306010553480156200002757600080fd5b50604051620050973803806200509783398181016040528101906200004d919062000388565b6040518060400160405280600c81526020017f4f6d6e69436861696e4e465400000000000000000000000000000000000000008152506040518060400160405280600781526020017f4f4f43434e4654000000000000000000000000000000000000000000000000008152508160009080519060200190620000d192919062000233565b508060019080519060200190620000ea92919062000233565b5050506200010d620001016200016560201b60201c565b6200016d60201b60201c565b82601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600e8190555080600f8190555050505062000449565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002419062000413565b90600052602060002090601f016020900481019282620002655760008555620002b1565b82601f106200028057805160ff1916838001178555620002b1565b82800160010185558215620002b1579182015b82811115620002b057825182559160200191906001019062000293565b5b509050620002c09190620002c4565b5090565b5b80821115620002df576000816000905550600101620002c5565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200031582620002e8565b9050919050565b620003278162000308565b81146200033357600080fd5b50565b60008151905062000347816200031c565b92915050565b6000819050919050565b62000362816200034d565b81146200036e57600080fd5b50565b600081519050620003828162000357565b92915050565b600080600060608486031215620003a457620003a3620002e3565b5b6000620003b48682870162000336565b9350506020620003c78682870162000371565b9250506040620003da8682870162000371565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200042c57607f821691505b60208210811415620004435762000442620003e4565b5b50919050565b614c3e80620004596000396000f3fe6080604052600436106101805760003560e01c80635e280f11116100d15780638da5cb5b1161008a578063b88d4fde11610064578063b88d4fde14610578578063c87b56dd146105a1578063e985e9c5146105de578063f2fde38b1461061b57610180565b80638da5cb5b146104f957806395d89b4114610524578063a22cb4651461054f57610180565b80635e280f11146103e457806361ca46861461040f5780636352211e1461042b57806370a0823114610468578063715018a6146104a55780638462151c146104bc57610180565b806318160ddd1161013e57806340a7bb101161011857806340a7bb101461031757806342842e0e146103555780634f6ccce71461037e57806355f804b3146103bb57610180565b806318160ddd1461028657806323b872dd146102b15780632f745c59146102da57610180565b80621d35671461018557806301ffc9a7146101ae57806306fdde03146101eb578063081812fc14610216578063095ea7b3146102535780631249c58b1461027c575b600080fd5b34801561019157600080fd5b506101ac60048036038101906101a79190612e7e565b610644565b005b3480156101ba57600080fd5b506101d560048036038101906101d09190612f75565b610764565b6040516101e29190612fbd565b60405180910390f35b3480156101f757600080fd5b506102006107de565b60405161020d9190613060565b60405180910390f35b34801561022257600080fd5b5061023d600480360381019061023891906130b8565b610870565b60405161024a9190613126565b60405180910390f35b34801561025f57600080fd5b5061027a6004803603810190610275919061316d565b6108f5565b005b610284610a0d565b005b34801561029257600080fd5b5061029b610b0e565b6040516102a891906131bc565b60405180910390f35b3480156102bd57600080fd5b506102d860048036038101906102d391906131d7565b610b1b565b005b3480156102e657600080fd5b5061030160048036038101906102fc919061316d565b610b7b565b60405161030e91906131bc565b60405180910390f35b34801561032357600080fd5b5061033e600480360381019061033991906132b6565b610c20565b60405161034c929190613372565b60405180910390f35b34801561036157600080fd5b5061037c600480360381019061037791906131d7565b610ce9565b005b34801561038a57600080fd5b506103a560048036038101906103a091906130b8565b610d09565b6040516103b291906131bc565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd919061343c565b610d7a565b005b3480156103f057600080fd5b506103f9610e10565b60405161040691906134e4565b60405180910390f35b610429600480360381019061042491906134ff565b610e36565b005b34801561043757600080fd5b50610452600480360381019061044d91906130b8565b6110c6565b60405161045f9190613126565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a9190613587565b611178565b60405161049c91906131bc565b60405180910390f35b3480156104b157600080fd5b506104ba611230565b005b3480156104c857600080fd5b506104e360048036038101906104de9190613587565b6112b8565b6040516104f09190613672565b60405180910390f35b34801561050557600080fd5b5061050e6113d2565b60405161051b9190613126565b60405180910390f35b34801561053057600080fd5b506105396113fc565b6040516105469190613060565b60405180910390f35b34801561055b57600080fd5b5061057660048036038101906105719190613694565b61148e565b005b34801561058457600080fd5b5061059f600480360381019061059a91906136d4565b6114a4565b005b3480156105ad57600080fd5b506105c860048036038101906105c391906130b8565b611506565b6040516105d59190613060565b60405180910390f35b3480156105ea57600080fd5b5061060560048036038101906106009190613757565b611679565b6040516106129190612fbd565b60405180910390f35b34801561062757600080fd5b50610642600480360381019061063d9190613587565b61170d565b005b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461069e57600080fd5b6000601484015190506000806000848060200190518101906106c091906137ea565b9250925092506000826040516020016106d9919061394d565b60405160208183030381529060405290506106f43384611805565b6106fe8382611823565b6001600d600082825461071191906139ad565b925050819055507ffe8fbd8d647d6ce0cb4cc79f0a8dae3464b1ae03e72da560ee2fa6da647a876d89858585600d54604051610751959493929190613a12565b60405180910390a1505050505050505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107d757506107d682611897565b5b9050919050565b6060600080546107ed90613a94565b80601f016020809104026020016040519081016040528092919081815260200182805461081990613a94565b80156108665780601f1061083b57610100808354040283529160200191610866565b820191906000526020600020905b81548152906001019060200180831161084957829003601f168201915b5050505050905090565b600061087b82611979565b6108ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b190613b38565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610900826110c6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096890613bca565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109906119e5565b73ffffffffffffffffffffffffffffffffffffffff1614806109bf57506109be816109b96119e5565b611679565b5b6109fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f590613c5c565b60405180910390fd5b610a0883836119ed565b505050565b600f546001600e54610a1f91906139ad565b1115610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5790613cc8565b60405180910390fd5b6001600e6000828254610a7391906139ad565b925050819055506000600e54604051602001610a8f9190613d5a565b6040516020818303038152906040529050610aac33600e54611805565b610ab8600e5482611823565b6001600d6000828254610acb91906139ad565b925050819055507f176b02bb2d12439ff7a20b59f402cca16c76f50508b13ef3166a600eb719354a600e54604051610b0391906131bc565b60405180910390a150565b6000600880549050905090565b610b2c610b266119e5565b82611aa6565b610b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6290613dfd565b60405180910390fd5b610b76838383611b84565b505050565b6000610b8683611178565b8210610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbe90613e8f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108a8a8a8a8a8a8a6040518863ffffffff1660e01b8152600401610c8a9796959493929190613eed565b604080518083038186803b158015610ca157600080fd5b505afa158015610cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd99190613f52565b9150915097509795505050505050565b610d04838383604051806020016040528060008152506114a4565b505050565b6000610d13610b0e565b8210610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b90614004565b60405180910390fd5b60088281548110610d6857610d67614024565b5b90600052602060002001549050919050565b610d826119e5565b73ffffffffffffffffffffffffffffffffffffffff16610da06113d2565b73ffffffffffffffffffffffffffffffffffffffff1614610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded9061409f565b60405180910390fd5b80600c9080519060200190610e0c929190612c07565b5050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e3f826110c6565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea39061410b565b60405180910390fd5b610eb582611deb565b6001600d6000828254610ec8919061412b565b925050819055506000338383604051602001610ee69392919061415f565b6040516020818303038152906040529050600060019050600081601054604051602001610f149291906141cc565b60405160208183030381529060405290506000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108a30876000876040518663ffffffff1660e01b8152600401610f8b95949392919061423c565b604080518083038186803b158015610fa257600080fd5b505afa158015610fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fda9190613f52565b50905080341015611020576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110179061430f565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5803100348b8b8b893360008a6040518963ffffffff1660e01b8152600401611089979695949392919061433e565b6000604051808303818588803b1580156110a257600080fd5b505af11580156110b6573d6000803e3d6000fd5b5050505050505050505050505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561116f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116690614428565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e0906144ba565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112386119e5565b73ffffffffffffffffffffffffffffffffffffffff166112566113d2565b73ffffffffffffffffffffffffffffffffffffffff16146112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a39061409f565b60405180910390fd5b6112b66000611f08565b565b606060006112c583611178565b9050600081141561132257600067ffffffffffffffff8111156112eb576112ea612d13565b5b6040519080825280602002602001820160405280156113195781602001602082028036833780820191505090505b509150506113cd565b60008167ffffffffffffffff81111561133e5761133d612d13565b5b60405190808252806020026020018201604052801561136c5781602001602082028036833780820191505090505b5090506000805b838110156113c5576113858682610b7b565b83838151811061139857611397614024565b5b60200260200101818152505081806113af906144da565b92505080806113bd906144da565b915050611373565b829450505050505b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461140b90613a94565b80601f016020809104026020016040519081016040528092919081815260200182805461143790613a94565b80156114845780601f1061145957610100808354040283529160200191611484565b820191906000526020600020905b81548152906001019060200180831161146757829003601f168201915b5050505050905090565b6114a06114996119e5565b8383611fce565b5050565b6114b56114af6119e5565b83611aa6565b6114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114eb90613dfd565b60405180910390fd5b6115008484848461213b565b50505050565b606061151182611979565b611550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154790614595565b60405180910390fd5b6000600b6000848152602001908152602001600020805461157090613a94565b80601f016020809104026020016040519081016040528092919081815260200182805461159c90613a94565b80156115e95780601f106115be576101008083540402835291602001916115e9565b820191906000526020600020905b8154815290600101906020018083116115cc57829003601f168201915b5050505050905060006115fa612197565b9050600081511415611610578192505050611674565b60008251111561164557808260405160200161162d9291906145e6565b60405160208183030381529060405292505050611674565b8061164f85612229565b6040516020016116609291906145e6565b604051602081830303815290604052925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6117156119e5565b73ffffffffffffffffffffffffffffffffffffffff166117336113d2565b73ffffffffffffffffffffffffffffffffffffffff1614611789576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117809061409f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f09061467c565b60405180910390fd5b61180281611f08565b50565b61181f82826040518060200160405280600081525061238a565b5050565b61182c82611979565b61186b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118629061470e565b60405180910390fd5b80600b60008481526020019081526020016000209080519060200190611892929190612c07565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061196257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806119725750611971826123e5565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a60836110c6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611ab182611979565b611af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae7906147a0565b60405180910390fd5b6000611afb836110c6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b6a57508373ffffffffffffffffffffffffffffffffffffffff16611b5284610870565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b7b5750611b7a8185611679565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ba4826110c6565b73ffffffffffffffffffffffffffffffffffffffff1614611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf190614832565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c61906148c4565b60405180910390fd5b611c7583838361244f565b611c806000826119ed565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cd0919061412b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d2791906139ad565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611de6838383612563565b505050565b6000611df6826110c6565b9050611e048160008461244f565b611e0f6000836119ed565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e5f919061412b565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f0481600084612563565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561203d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203490614930565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161212e9190612fbd565b60405180910390a3505050565b612146848484611b84565b61215284848484612568565b612191576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612188906149c2565b60405180910390fd5b50505050565b6060600c80546121a690613a94565b80601f01602080910402602001604051908101604052809291908181526020018280546121d290613a94565b801561221f5780601f106121f45761010080835404028352916020019161221f565b820191906000526020600020905b81548152906001019060200180831161220257829003601f168201915b5050505050905090565b60606000821415612271576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612385565b600082905060005b600082146122a357808061228c906144da565b915050600a8261229c9190614a11565b9150612279565b60008167ffffffffffffffff8111156122bf576122be612d13565b5b6040519080825280601f01601f1916602001820160405280156122f15781602001600182028036833780820191505090505b5090505b6000851461237e5760018261230a919061412b565b9150600a856123199190614a42565b603061232591906139ad565b60f81b81838151811061233b5761233a614024565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123779190614a11565b94506122f5565b8093505050505b919050565b61239483836126ff565b6123a16000848484612568565b6123e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d7906149c2565b60405180910390fd5b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61245a8383836128d9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561249d57612498816128de565b6124dc565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146124db576124da8382612927565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561251f5761251a81612a94565b61255e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461255d5761255c8282612b65565b5b5b505050565b505050565b60006125898473ffffffffffffffffffffffffffffffffffffffff16612be4565b156126f2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125b26119e5565b8786866040518563ffffffff1660e01b81526004016125d49493929190614a73565b602060405180830381600087803b1580156125ee57600080fd5b505af192505050801561261f57506040513d601f19601f8201168201806040525081019061261c9190614ad4565b60015b6126a2573d806000811461264f576040519150601f19603f3d011682016040523d82523d6000602084013e612654565b606091505b5060008151141561269a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612691906149c2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506126f7565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561276f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276690614b4d565b60405180910390fd5b61277881611979565b156127b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127af90614bb9565b60405180910390fd5b6127c46000838361244f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461281491906139ad565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128d560008383612563565b5050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161293484611178565b61293e919061412b565b9050600060076000848152602001908152602001600020549050818114612a23576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612aa8919061412b565b9050600060096000848152602001908152602001600020549050600060088381548110612ad857612ad7614024565b5b906000526020600020015490508060088381548110612afa57612af9614024565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612b4957612b48614bd9565b5b6001900381819060005260206000200160009055905550505050565b6000612b7083611178565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612c1390613a94565b90600052602060002090601f016020900481019282612c355760008555612c7c565b82601f10612c4e57805160ff1916838001178555612c7c565b82800160010185558215612c7c579182015b82811115612c7b578251825591602001919060010190612c60565b5b509050612c899190612c8d565b5090565b5b80821115612ca6576000816000905550600101612c8e565b5090565b6000604051905090565b600080fd5b600080fd5b600061ffff82169050919050565b612cd581612cbe565b8114612ce057600080fd5b50565b600081359050612cf281612ccc565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612d4b82612d02565b810181811067ffffffffffffffff82111715612d6a57612d69612d13565b5b80604052505050565b6000612d7d612caa565b9050612d898282612d42565b919050565b600067ffffffffffffffff821115612da957612da8612d13565b5b612db282612d02565b9050602081019050919050565b82818337600083830152505050565b6000612de1612ddc84612d8e565b612d73565b905082815260208101848484011115612dfd57612dfc612cfd565b5b612e08848285612dbf565b509392505050565b600082601f830112612e2557612e24612cf8565b5b8135612e35848260208601612dce565b91505092915050565b600067ffffffffffffffff82169050919050565b612e5b81612e3e565b8114612e6657600080fd5b50565b600081359050612e7881612e52565b92915050565b60008060008060808587031215612e9857612e97612cb4565b5b6000612ea687828801612ce3565b945050602085013567ffffffffffffffff811115612ec757612ec6612cb9565b5b612ed387828801612e10565b9350506040612ee487828801612e69565b925050606085013567ffffffffffffffff811115612f0557612f04612cb9565b5b612f1187828801612e10565b91505092959194509250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612f5281612f1d565b8114612f5d57600080fd5b50565b600081359050612f6f81612f49565b92915050565b600060208284031215612f8b57612f8a612cb4565b5b6000612f9984828501612f60565b91505092915050565b60008115159050919050565b612fb781612fa2565b82525050565b6000602082019050612fd26000830184612fae565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613012578082015181840152602081019050612ff7565b83811115613021576000848401525b50505050565b600061303282612fd8565b61303c8185612fe3565b935061304c818560208601612ff4565b61305581612d02565b840191505092915050565b6000602082019050818103600083015261307a8184613027565b905092915050565b6000819050919050565b61309581613082565b81146130a057600080fd5b50565b6000813590506130b28161308c565b92915050565b6000602082840312156130ce576130cd612cb4565b5b60006130dc848285016130a3565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613110826130e5565b9050919050565b61312081613105565b82525050565b600060208201905061313b6000830184613117565b92915050565b61314a81613105565b811461315557600080fd5b50565b60008135905061316781613141565b92915050565b6000806040838503121561318457613183612cb4565b5b600061319285828601613158565b92505060206131a3858286016130a3565b9150509250929050565b6131b681613082565b82525050565b60006020820190506131d160008301846131ad565b92915050565b6000806000606084860312156131f0576131ef612cb4565b5b60006131fe86828701613158565b935050602061320f86828701613158565b9250506040613220868287016130a3565b9150509250925092565b600080fd5b600080fd5b60008083601f84011261324a57613249612cf8565b5b8235905067ffffffffffffffff8111156132675761326661322a565b5b6020830191508360018202830111156132835761328261322f565b5b9250929050565b61329381612fa2565b811461329e57600080fd5b50565b6000813590506132b08161328a565b92915050565b600080600080600080600060a0888a0312156132d5576132d4612cb4565b5b60006132e38a828b01612ce3565b97505060206132f48a828b01613158565b965050604088013567ffffffffffffffff81111561331557613314612cb9565b5b6133218a828b01613234565b955095505060606133348a828b016132a1565b935050608088013567ffffffffffffffff81111561335557613354612cb9565b5b6133618a828b01613234565b925092505092959891949750929550565b600060408201905061338760008301856131ad565b61339460208301846131ad565b9392505050565b600067ffffffffffffffff8211156133b6576133b5612d13565b5b6133bf82612d02565b9050602081019050919050565b60006133df6133da8461339b565b612d73565b9050828152602081018484840111156133fb576133fa612cfd565b5b613406848285612dbf565b509392505050565b600082601f83011261342357613422612cf8565b5b81356134338482602086016133cc565b91505092915050565b60006020828403121561345257613451612cb4565b5b600082013567ffffffffffffffff8111156134705761346f612cb9565b5b61347c8482850161340e565b91505092915050565b6000819050919050565b60006134aa6134a56134a0846130e5565b613485565b6130e5565b9050919050565b60006134bc8261348f565b9050919050565b60006134ce826134b1565b9050919050565b6134de816134c3565b82525050565b60006020820190506134f960008301846134d5565b92915050565b60008060008060006080868803121561351b5761351a612cb4565b5b600061352988828901612ce3565b955050602086013567ffffffffffffffff81111561354a57613549612cb9565b5b61355688828901613234565b94509450506040613569888289016130a3565b925050606061357a888289016130a3565b9150509295509295909350565b60006020828403121561359d5761359c612cb4565b5b60006135ab84828501613158565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6135e981613082565b82525050565b60006135fb83836135e0565b60208301905092915050565b6000602082019050919050565b600061361f826135b4565b61362981856135bf565b9350613634836135d0565b8060005b8381101561366557815161364c88826135ef565b975061365783613607565b925050600181019050613638565b5085935050505092915050565b6000602082019050818103600083015261368c8184613614565b905092915050565b600080604083850312156136ab576136aa612cb4565b5b60006136b985828601613158565b92505060206136ca858286016132a1565b9150509250929050565b600080600080608085870312156136ee576136ed612cb4565b5b60006136fc87828801613158565b945050602061370d87828801613158565b935050604061371e878288016130a3565b925050606085013567ffffffffffffffff81111561373f5761373e612cb9565b5b61374b87828801612e10565b91505092959194509250565b6000806040838503121561376e5761376d612cb4565b5b600061377c85828601613158565b925050602061378d85828601613158565b9150509250929050565b60006137a2826130e5565b9050919050565b6137b281613797565b81146137bd57600080fd5b50565b6000815190506137cf816137a9565b92915050565b6000815190506137e48161308c565b92915050565b60008060006060848603121561380357613802612cb4565b5b6000613811868287016137c0565b9350506020613822868287016137d5565b9250506040613833868287016137d5565b9150509250925092565b600081905092915050565b7f68747470733a2f2f697066732e696f2f697066732f516d4e5935347a386d426e60008201527f585658423138473542715064715a3556686d78314346435670674745655a527460208201527f7839412f6e66745f000000000000000000000000000000000000000000000000604082015250565b60006138ca60488361383d565b91506138d582613848565b604882019050919050565b6000819050919050565b6138fb6138f682613082565b6138e0565b82525050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061393760058361383d565b915061394282613901565b600582019050919050565b6000613958826138bd565b915061396482846138ea565b6020820191506139738261392a565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139b882613082565b91506139c383613082565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139f8576139f761397e565b5b828201905092915050565b613a0c81612cbe565b82525050565b600060a082019050613a276000830188613a03565b613a346020830187613117565b613a4160408301866131ad565b613a4e60608301856131ad565b613a5b60808301846131ad565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613aac57607f821691505b60208210811415613ac057613abf613a65565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613b22602c83612fe3565b9150613b2d82613ac6565b604082019050919050565b60006020820190508181036000830152613b5181613b15565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bb4602183612fe3565b9150613bbf82613b58565b604082019050919050565b60006020820190508181036000830152613be381613ba7565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613c46603883612fe3565b9150613c5182613bea565b604082019050919050565b60006020820190508181036000830152613c7581613c39565b9050919050565b7f4578636565647320737570706c79000000000000000000000000000000000000600082015250565b6000613cb2600e83612fe3565b9150613cbd82613c7c565b602082019050919050565b60006020820190508181036000830152613ce181613ca5565b9050919050565b7f697066733a2f2f516d4e5935347a386d426e585658423138473542715064715a60008201527f3556686d78314346435670674745655a52747839412f6e66745f000000000000602082015250565b6000613d44603a8361383d565b9150613d4f82613ce8565b603a82019050919050565b6000613d6582613d37565b9150613d7182846138ea565b602082019150613d808261392a565b915081905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613de7603183612fe3565b9150613df282613d8b565b604082019050919050565b60006020820190508181036000830152613e1681613dda565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613e79602b83612fe3565b9150613e8482613e1d565b604082019050919050565b60006020820190508181036000830152613ea881613e6c565b9050919050565b600082825260208201905092915050565b6000613ecc8385613eaf565b9350613ed9838584612dbf565b613ee283612d02565b840190509392505050565b600060a082019050613f02600083018a613a03565b613f0f6020830189613117565b8181036040830152613f22818789613ec0565b9050613f316060830186612fae565b8181036080830152613f44818486613ec0565b905098975050505050505050565b60008060408385031215613f6957613f68612cb4565b5b6000613f77858286016137d5565b9250506020613f88858286016137d5565b9150509250929050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613fee602c83612fe3565b9150613ff982613f92565b604082019050919050565b6000602082019050818103600083015261401d81613fe1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614089602083612fe3565b915061409482614053565b602082019050919050565b600060208201905081810360008301526140b88161407c565b9050919050565b7f4e6f7420746865206f776e657200000000000000000000000000000000000000600082015250565b60006140f5600d83612fe3565b9150614100826140bf565b602082019050919050565b60006020820190508181036000830152614124816140e8565b9050919050565b600061413682613082565b915061414183613082565b9250828210156141545761415361397e565b5b828203905092915050565b60006060820190506141746000830186613117565b61418160208301856131ad565b61418e60408301846131ad565b949350505050565b60008160f01b9050919050565b60006141ae82614196565b9050919050565b6141c66141c182612cbe565b6141a3565b82525050565b60006141d882856141b5565b6002820191506141e882846138ea565b6020820191508190509392505050565b600081519050919050565b600061420e826141f8565b6142188185613eaf565b9350614228818560208601612ff4565b61423181612d02565b840191505092915050565b600060a0820190506142516000830188613a03565b61425e6020830187613117565b81810360408301526142708186614203565b905061427f6060830185612fae565b81810360808301526142918184614203565b90509695505050505050565b7f4d7573742073656e6420656e6f7567682076616c756520746f20636f7665722060008201527f6d65737361676546656500000000000000000000000000000000000000000000602082015250565b60006142f9602a83612fe3565b91506143048261429d565b604082019050919050565b60006020820190508181036000830152614328816142ec565b9050919050565b61433881613797565b82525050565b600060c082019050614353600083018a613a03565b818103602083015261436681888a613ec0565b9050818103604083015261437a8187614203565b9050614389606083018661432f565b6143966080830185613117565b81810360a08301526143a88184614203565b905098975050505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614412602983612fe3565b915061441d826143b6565b604082019050919050565b6000602082019050818103600083015261444181614405565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006144a4602a83612fe3565b91506144af82614448565b604082019050919050565b600060208201905081810360008301526144d381614497565b9050919050565b60006144e582613082565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145185761451761397e565b5b600182019050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b600061457f602f83612fe3565b915061458a82614523565b604082019050919050565b600060208201905081810360008301526145ae81614572565b9050919050565b60006145c082612fd8565b6145ca818561383d565b93506145da818560208601612ff4565b80840191505092915050565b60006145f282856145b5565b91506145fe82846145b5565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614666602683612fe3565b91506146718261460a565b604082019050919050565b6000602082019050818103600083015261469581614659565b9050919050565b7f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006146f8602c83612fe3565b91506147038261469c565b604082019050919050565b60006020820190508181036000830152614727816146eb565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061478a602c83612fe3565b91506147958261472e565b604082019050919050565b600060208201905081810360008301526147b98161477d565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061481c602583612fe3565b9150614827826147c0565b604082019050919050565b6000602082019050818103600083015261484b8161480f565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006148ae602483612fe3565b91506148b982614852565b604082019050919050565b600060208201905081810360008301526148dd816148a1565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061491a601983612fe3565b9150614925826148e4565b602082019050919050565b600060208201905081810360008301526149498161490d565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006149ac603283612fe3565b91506149b782614950565b604082019050919050565b600060208201905081810360008301526149db8161499f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a1c82613082565b9150614a2783613082565b925082614a3757614a366149e2565b5b828204905092915050565b6000614a4d82613082565b9150614a5883613082565b925082614a6857614a676149e2565b5b828206905092915050565b6000608082019050614a886000830187613117565b614a956020830186613117565b614aa260408301856131ad565b8181036060830152614ab48184614203565b905095945050505050565b600081519050614ace81612f49565b92915050565b600060208284031215614aea57614ae9612cb4565b5b6000614af884828501614abf565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614b37602083612fe3565b9150614b4282614b01565b602082019050919050565b60006020820190508181036000830152614b6681614b2a565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614ba3601c83612fe3565b9150614bae82614b6d565b602082019050919050565b60006020820190508181036000830152614bd281614b96565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220b5a830440b5b47ae4faa35ca7cae737d709dc9aba637324db309a8dd28b8ae6364736f6c6343000809003300000000000000000000000093f54d755a063ce7bb9e6ac47eccc8e33411d70600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005