0x608060405260008054600160a060020a03191633179055614278806100256000396000f30060806040526004361061011c5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630b82924a811461012157806330a34302146101c657806331cadaa71461020e5780633b024b22146102615780633b9a1879146102b45780634e011e7514610307578063587931ea14610341578063715018a61461036f57806372f2c0b1146103845780638c61c8f8146103be5780638d918d9c146103f85780638da5cb5b146104325780638f4ffcb114610470578063ae15ec4c146104ed578063b5a42b8714610527578063b5dd9ba51461056a578063d01d422b146105a4578063d2511a04146105ea578063d848dee714610617578063f2fde38b14610631578063f9dedaac1461065f575b600080fd5b34801561012d57600080fd5b5061015b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000600435166106ef565b6040518087815260200186815260200185815260200184600281111561017d57fe5b60ff16815260200183600581111561019157fe5b60ff16815273ffffffffffffffffffffffffffffffffffffffff90921660208301525060408051918290030195509350505050f35b3480156101d257600080fd5b5061020c600480357fffffffffffffffffffffffffffffffff00000000000000000000000000000000169060248035908101910135610764565b005b34801561021a57600080fd5b5061020c7fffffffffffffffffffffffffffffffff000000000000000000000000000000006004351673ffffffffffffffffffffffffffffffffffffffff602435166107e1565b34801561026d57600080fd5b5061020c7fffffffffffffffffffffffffffffffff000000000000000000000000000000006004351673ffffffffffffffffffffffffffffffffffffffff60243516610832565b3480156102c057600080fd5b5061020c7fffffffffffffffffffffffffffffffff000000000000000000000000000000006004351673ffffffffffffffffffffffffffffffffffffffff602435166109a7565b34801561031357600080fd5b5061020c7fffffffffffffffffffffffffffffffff00000000000000000000000000000000600435166109f3565b34801561034d57600080fd5b5061020c73ffffffffffffffffffffffffffffffffffffffff60043516610f37565b34801561037b57600080fd5b5061020c6110e7565b34801561039057600080fd5b5061020c7fffffffffffffffffffffffffffffffff0000000000000000000000000000000060043516611178565b3480156103ca57600080fd5b5061020c7fffffffffffffffffffffffffffffffff00000000000000000000000000000000600435166111c7565b34801561040457600080fd5b5061020c7fffffffffffffffffffffffffffffffff000000000000000000000000000000006004351661159b565b34801561043e57600080fd5b506104476118b0565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561047c57600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261020c9473ffffffffffffffffffffffffffffffffffffffff8135811695602480359660443590931695369560849492019181908401838280828437509497506118cc9650505050505050565b3480156104f957600080fd5b5061020c7fffffffffffffffffffffffffffffffff0000000000000000000000000000000060043516611b40565b34801561053357600080fd5b5061020c7fffffffffffffffffffffffffffffffff000000000000000000000000000000006004351660ff60243516604435611bcf565b34801561057657600080fd5b5061020c7fffffffffffffffffffffffffffffffff0000000000000000000000000000000060043516612347565b3480156105b057600080fd5b5061020c600480357fffffffffffffffffffffffffffffffff00000000000000000000000000000000169060248035908101910135612392565b61020c7fffffffffffffffffffffffffffffffff0000000000000000000000000000000060043516612409565b34801561062357600080fd5b5061020c6004351515612527565b34801561063d57600080fd5b5061020c73ffffffffffffffffffffffffffffffffffffffff600435166125d8565b34801561066b57600080fd5b506106997fffffffffffffffffffffffffffffffff0000000000000000000000000000000060043516612608565b6040805173ffffffffffffffffffffffffffffffffffffffff80871682528581166020830152841691810191909152606081018260048111156106d857fe5b60ff16815260200194505050505060405180910390f35b7fffffffffffffffffffffffffffffffff000000000000000000000000000000001660009081526003602081905260409091208054600182015460028301549290930154909360ff808316926101008104909116916201000090910473ffffffffffffffffffffffffffffffffffffffff1690565b8261076e81612686565b6107db8484848080601f016020809104026020016040519081016040528093929190818152602001838380828437505050507fffffffffffffffffffffffffffffffff0000000000000000000000000000000089166000908152600260205260409020939291505061274e565b50505050565b816107eb81612686565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600090815260026020526040902061082d90848463ffffffff6128e816565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461085657600080fd5b8161086081612686565b8261086a81612b2e565b73ffffffffffffffffffffffffffffffffffffffff831615156108ee57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d7573742070726f76696465206120726566756e642061646472657373000000604482015290519081900360640190fd5b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000841660008181526003602081815260409283902090910180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff8916908102919091179091558251908152915133927f022d11b5a2f0e6d2cd5c71892d271eb2a0094e07e457278b7d45d191447d2b4d92908290030190a350505050565b816109b181612686565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600090815260026020526040902061082d90848463ffffffff612be316565b6000816109ff81612686565b82610a0981612b2e565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008416600090815260026020526040902060010154849073ffffffffffffffffffffffffffffffffffffffff1633148015610aac575060037fffffffffffffffffffffffffffffffff00000000000000000000000000000000821660009081526003602081905260409091200154610100900460ff166005811115610aaa57fe5b145b80610b5a57507fffffffffffffffffffffffffffffffff0000000000000000000000000000000081166000908152600360208190526040909120015462010000900473ffffffffffffffffffffffffffffffffffffffff1633148015610b5a575060047fffffffffffffffffffffffffffffffff00000000000000000000000000000000821660009081526003602081905260409091200154610100900460ff166005811115610b5857fe5b145b1515610c1357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f457363726f772063616e206f6e6c792062652077697468647261776e2062792060448201527f636172726965722069662072656c6561736564206f722062792073686970706560648201527f7220696620726566756e64656400000000000000000000000000000000000000608482015290519081900360a40190fd5b60017fffffffffffffffffffffffffffffffff0000000000000000000000000000000086166000908152600360208190526040909120015460ff166002811115610c5957fe5b141580610c7d575060015473ffffffffffffffffffffffffffffffffffffffff1615155b1515610cea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f546f6b656e2061646472657373206d7573742062652073657400000000000000604482015290519081900360640190fd5b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000085166000908152600360205260409020610d2b908663ffffffff612e2916565b935060027fffffffffffffffffffffffffffffffff0000000000000000000000000000000086166000908152600360208190526040909120015460ff166002811115610d7357fe5b1415610dac57604051339085156108fc029086906000818181858888f19350505050158015610da6573d6000803e3d6000fd5b50610f30565b60017fffffffffffffffffffffffffffffffff0000000000000000000000000000000086166000908152600360208190526040909120015460ff166002811115610df257fe5b1415610ea457600154604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101879052905173ffffffffffffffffffffffffffffffffffffffff9092169163a9059cbb916044808201926020929091908290030181600087803b158015610e7257600080fd5b505af1158015610e86573d6000803e3d6000fd5b505050506040513d6020811015610e9c57600080fd5b50610f309050565b604080517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f43616e6e6f742077697468647261772c20756e6b6e6f776e2066756e64696e6760448201527f5479706500000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610f5b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff81161515610fdf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4d7573742070726f76696465206120746f6b656e206164647265737300000000604482015290519081900360640190fd5b60015473ffffffffffffffffffffffffffffffffffffffff161561106457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f546f6b656e206164647265737320616c72656164792073657400000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff8084167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911791829055604080519290911682525133917ff58cc784b534171ea93607f4bef3992333c8c2b9f91e6e640d42c0469f13fa24919081900360200190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461110b57600080fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a2600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b8061118281612686565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000821660009081526002602052604090206111c3908363ffffffff612f9316565b5050565b806111d181612686565b816111db81612b2e565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000831660009081526003602052604090208390611217906131b9565b4210156113b25760005473ffffffffffffffffffffffffffffffffffffffff163314806112f457507fffffffffffffffffffffffffffffffff0000000000000000000000000000000081166000908152600260208190526040909120015473ffffffffffffffffffffffffffffffffffffffff16331480156112f4575060047fffffffffffffffffffffffffffffffff0000000000000000000000000000000082166000908152600260208190526040909120015474010000000000000000000000000000000000000000900460ff1660048111156112f257fe5b145b15156113ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f526566756e64732063616e206f6e6c792062652069737375656420746f20436160448201527f6e63656c656420736869706d656e747320627920746865204d6f64657261746f60648201527f7200000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b61155a565b60005473ffffffffffffffffffffffffffffffffffffffff1633148061141e57507fffffffffffffffffffffffffffffffff00000000000000000000000000000000811660009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b8061147257507fffffffffffffffffffffffffffffffff00000000000000000000000000000000811660009081526002602052604090206001015473ffffffffffffffffffffffffffffffffffffffff1633145b806114c757507fffffffffffffffffffffffffffffffff0000000000000000000000000000000081166000908152600260208190526040909120015473ffffffffffffffffffffffffffffffffffffffff1633145b151561155a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f6e6c7920746865206d656d62657273206f662074686520736869706d656e7460448201527f2063616e20726566756e6420657363726f770000000000000000000000000000606482015290519081900360840190fd5b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000841660009081526003602052604090206107db908563ffffffff6131da16565b806115a581612686565b816115af81612b2e565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000831660009081526002602081905260409091200154839073ffffffffffffffffffffffffffffffffffffffff1633148061165057507fffffffffffffffffffffffffffffffff00000000000000000000000000000000811660009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b15156116e357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4f6e6c79207468652073686970706572206f72206d6f64657261746f7220636160448201527f6e2072656c6561736520657363726f7700000000000000000000000000000000606482015290519081900360840190fd5b8360026040805190810160405280601581526020017f457363726f77206d7573742062652046756e6465640000000000000000000000815250611727838383613313565b60408051808201909152601981527f536869706d656e74206d75737420626520436f6d706c6574650000000000000060208201528790600390817fffffffffffffffffffffffffffffffff0000000000000000000000000000000084166000908152600260208190526040909120015474010000000000000000000000000000000000000000900460ff1660048111156117bd57fe5b829114611862576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561182757818101518382015260200161180f565b50505050905090810190601f1680156118545780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b507fffffffffffffffffffffffffffffffff000000000000000000000000000000008a1660009081526003602052604090206118a4908b63ffffffff61342316565b50505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60006118d782613538565b60015490915073ffffffffffffffffffffffffffffffffffffffff163314801561191b575060015473ffffffffffffffffffffffffffffffffffffffff8481169116145b15156119ae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5348495020746f6b656e206164647265737320646f6573206e6f74206d61746360448201527f6800000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6119b781612686565b6119c081612b2e565b6119ca81866135b5565b611a0b8160016040805190810160405280601681526020017f457363726f77206d757374206265206372656174656400000000000000000000815250613313565b611a4c8160016040805190810160405280602081526020017f457363726f772066756e64696e672074797065206d757374206265205348495081525061366d565b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081166000908152600360205260409020611a8e90828663ffffffff61370c16565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152306024830152604482018790529151918516916323b872dd916064808201926020929091908290030181600087803b158015611b0d57600080fd5b505af1158015611b21573d6000803e3d6000fd5b505050506040513d6020811015611b3757600080fd5b50505050505050565b80611b4a81612686565b8160026040805190810160405280601581526020017f457363726f77206d7573742062652046756e6465640000000000000000000000815250611b8e838383613313565b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000085166000908152600260205260409020610f30908663ffffffff61391a16565b600154600090819074010000000000000000000000000000000000000000900460ff1615611c8457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f546869732076657273696f6e206f6620746865204c4f414420636f6e7472616360448201527f7420686173206265656e20646570726563617465640000000000000000000000606482015290519081900360840190fd5b6000846002811115611c9257fe5b14611fd7576001846002811115611ca557fe5b1480611cbc57506002846002811115611cba57fe5b145b1515611d2957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f496e76616c69642046756e64696e672054797065000000000000000000000000604482015290519081900360640190fd5b60008311611d9857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f457363726f77206d757374206861766520616e20616d6f756e74000000000000604482015290519081900360640190fd5b6001846002811115611da657fe5b148015611dbe57506b019d971e4fe8401e7400000083105b80611de957506002846002811115611dd257fe5b148015611de957506a52b7d2dcc80cd2e400000083105b1515611e7c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f457363726f7720616d6f756e74206d757374206265206c657373207468616e2060448201527f6d617820737570706c7900000000000000000000000000000000000000000000606482015290519081900360840190fd5b6001846002811115611e8a57fe5b141580611eae575060015473ffffffffffffffffffffffffffffffffffffffff1615155b1515611f1b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f546f6b656e2061646472657373206d7573742062652073657400000000000000604482015290519081900360640190fd5b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008516600090815260036020526040812092506003830154610100900460ff166005811115611f6657fe5b14611fd257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f457363726f7720616c7265616479206578697374730000000000000000000000604482015290519081900360640190fd5b61206a565b821561206a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602481018290527f43616e6e6f742073706563696679206120636f6e7472616374656420616d6f7560448201527f6e7420666f72206120736869706d656e742077697468206e6f20657363726f77606482015290519081900360840190fd5b507fffffffffffffffffffffffffffffffff000000000000000000000000000000008416600090815260026020526040812090600282015474010000000000000000000000000000000000000000900460ff1660048111156120c857fe5b1461213457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f536869706d656e7420616c726561647920657869737473000000000000000000604482015290519081900360640190fd5b6002810180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905580547fffffffffffffffffffffffff0000000000000000000000000000000000000000163390811782556040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000871691907f20c11765042d31b9c3d926f3ea58cb39e3d4cab38daefd35c0be1a743a591ce290600090a360008460028111156121fb57fe5b14610f30576003820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178082558591907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600183600281111561226257fe5b021790555082825542600280840182905582546003850180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff90921662010000029190911790556040517fffffffffffffffffffffffffffffffff0000000000000000000000000000000088169233927f4ca587d68b891accc1b316c9ee140fc47db184f1e6d56eb5b135c6975b35529b92899289929091908190859081111561231f57fe5b60ff168152602001838152602001828152602001935050505060405180910390a35050505050565b8061235181612686565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000821660009081526002602052604090206111c3908363ffffffff613bef16565b8261239c81612686565b6107db8484848080601f016020809104026020016040519081016040528093929190818152602001838380828437505050507fffffffffffffffffffffffffffffffff0000000000000000000000000000000089166000908152600260205260409020939291505061405d565b8061241381612686565b8161241d81612b2e565b823361242982826135b5565b8460016040805190810160405280601681526020017f457363726f77206d75737420626520637265617465640000000000000000000081525061246d838383613313565b876002606060405190810160405280602181526020017f457363726f772066756e64696e672074797065206d757374206265204574686581526020017f72000000000000000000000000000000000000000000000000000000000000008152506124d883838361366d565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008b16600090815260036020526040902061251a908c3463ffffffff61370c16565b5050505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461254b57600080fd5b60018054821515740100000000000000000000000000000000000000009081027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9092169190911791829055604080519190920460ff1615158152905133917f20fa1850f9f57a861a2d785655d498236720f4583e570b0b95c07fc3bb230592919081900360200190a250565b60005473ffffffffffffffffffffffffffffffffffffffff1633146125fc57600080fd5b61260581614190565b50565b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000016600090815260026020819052604090912080546001820154919092015473ffffffffffffffffffffffffffffffffffffffff92831693918316928116917401000000000000000000000000000000000000000090910460ff1690565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000811660009081526002602081905260408220015474010000000000000000000000000000000000000000900460ff1660048111156126e157fe5b141561260557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f536869706d656e7420646f6573206e6f74206578697374000000000000000000604482015290519081900360640190fd5b825473ffffffffffffffffffffffffffffffffffffffff1633148061278c5750600183015473ffffffffffffffffffffffffffffffffffffffff1633145b151561281f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4f6e6c792053686970706572206f72204361727269657220616c6c6f7765642060448201527f746f20736574205661756c744861736800000000000000000000000000000000606482015290519081900360840190fd5b816fffffffffffffffffffffffffffffffff19163373ffffffffffffffffffffffffffffffffffffffff167fdb58a329e3b4ce23317caddd9d575908ed80e1e352a815848903708017024abc836040518080602001828103825283818151815260200191508051906020019080838360005b838110156128a9578181015183820152602001612891565b50505050905090810190601f1680156128d65780820380516001836020036101000a031916815260200191505b509250505060405180910390a3505050565b60408051606081018252602581527f4f6e6c79205368697070657220616c6c6f77656420746f20736574204d6f646560208201527f7261746f72000000000000000000000000000000000000000000000000000000918101919091528354849190819073ffffffffffffffffffffffffffffffffffffffff1633146129c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561182757818101518382015260200161180f565b506001600286015474010000000000000000000000000000000000000000900460ff1660048111156129f757fe5b14612a8957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4d6f64657261746f722063616e206f6e6c79206265206d6f646966696564206960448201527f6e20437265617465642073746174650000000000000000000000000000000000606482015290519081900360840190fd5b60028501805473ffffffffffffffffffffffffffffffffffffffff85167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517fffffffffffffffffffffffffffffffff0000000000000000000000000000000086169133917f9ab7ab8cdd087ac2b1125204600cdcff9059c810a66344e32388e5f4a801ac949181900360200190a35050505050565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008116600090815260036020819052604082200154610100900460ff166005811115612b7657fe5b141561260557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f536869706d656e7420686173206e6f20657363726f7700000000000000000000604482015290519081900360640190fd5b60408051606081018252602381527f4f6e6c79205368697070657220616c6c6f77656420746f20736574204361727260208201527f6965720000000000000000000000000000000000000000000000000000000000918101919091528354849190819073ffffffffffffffffffffffffffffffffffffffff163314612cc4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561182757818101518382015260200161180f565b506001600286015474010000000000000000000000000000000000000000900460ff166004811115612cf257fe5b14612d8457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f436172726965722063616e206f6e6c79206265206d6f64696669656420696e2060448201527f4372656174656420737461746500000000000000000000000000000000000000606482015290519081900360840190fd5b60018501805473ffffffffffffffffffffffffffffffffffffffff85167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517fffffffffffffffffffffffffffffffff0000000000000000000000000000000086169133917fe79d8ab386ec40ee7e43f6f18f438ac4ef9501be44799453d68aba8485e863429181900360200190a35050505050565b6000600380840154610100900460ff166005811115612e4457fe5b1480612e67575060046003840154610100900460ff166005811115612e6557fe5b145b1515612efa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f457363726f77206d7573742062652052656c6561736564206f7220526566756e60448201527f6465640000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b5060018201805460009091556003830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166105001790556040805182815290517fffffffffffffffffffffffffffffffff0000000000000000000000000000000084169133917f84fd8b6eb8adde3741a739b329da79b8d02dece91c8d45e3b4786d77bb62beea9181900360200190a392915050565b600182015473ffffffffffffffffffffffffffffffffffffffff16331480612fd45750600282015473ffffffffffffffffffffffffffffffffffffffff1633145b151561306757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4f6e6c792043617272696572206f72204d6f64657261746f7220616c6c6f776560448201527f6420746f2073657420436f6d706c657465000000000000000000000000000000606482015290519081900360840190fd5b60028083015474010000000000000000000000000000000000000000900460ff16600481111561309357fe5b1461312557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4f6e6c7920496e2050726f677265737320736869706d656e74732063616e206260448201527f65206d61726b656420436f6d706c657465000000000000000000000000000000606482015290519081900360840190fd5b6002820180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740300000000000000000000000000000000000000001790556040517fffffffffffffffffffffffffffffffff0000000000000000000000000000000082169033907f4b3002db62e0a6aeacd89784c75231879b4bfb24122d1d14add99df96ec3bbee90600090a35050565b60028101546000906131d4906276a70063ffffffff61423f16565b92915050565b60016003830154610100900460ff1660058111156131f457fe5b1480613217575060026003830154610100900460ff16600581111561321557fe5b145b151561328457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f457363726f77206d7573742062652043726561746564206f722046756e646564604482015290519081900360640190fd5b6003820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610400179055600182015460408051918252517fffffffffffffffffffffffffffffffff0000000000000000000000000000000083169133917f90fed727c47d7468cde5e981ac2bf5e88f5e177c418f8e8236456734e0fbff989181900360200190a35050565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600090815260036020819052604082200154610100900460ff16600581111561335b57fe5b14806133b9575081600581111561336e57fe5b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000841660009081526003602081905260409091200154610100900460ff1660058111156133b757fe5b145b819015156107db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360008381101561182757818101518382015260200161180f565b60026003830154610100900460ff16600581111561343d57fe5b146134a957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f457363726f77206d7573742062652046756e6465640000000000000000000000604482015290519081900360640190fd5b6003820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610300179055600182015460408051918252517fffffffffffffffffffffffffffffffff0000000000000000000000000000000083169133917f3b28503c82a1cdd91a81ec34c8932fec669c77454af0c449bc451d2a6727b44b9181900360200190a35050565b600060208251111515156135ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f49742073686f756c6420686176652061206c656e677468203d3d203332000000604482015290519081900360640190fd5b506020015190565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000821660009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff8281169116146111c357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f6e6c792074686520736869707065722063616e2066756e6420657363726f77604482015290519081900360640190fd5b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600090815260036020819052604082200154610100900460ff1660058111156136b557fe5b14806133b957508160028111156136c857fe5b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000084166000908152600360208190526040909120015460ff1660028111156133b757fe5b60016003840154610100900460ff16600581111561372657fe5b1461379257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f457363726f77206d757374206265204372656174656400000000000000000000604482015290519081900360640190fd5b6000811161380157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f46756e64656420616d6f756e74206d757374206265206e6f6e2d7a65726f0000604482015290519081900360640190fd5b6001830154613816908263ffffffff61423f16565b60018401556040805182815290517fffffffffffffffffffffffffffffffff0000000000000000000000000000000084169133917f0480ab55bb7ebff4ef2f824bfaa1133963801b352bd3acac24f18c6eb07d2c639181900360200190a3825460018401541061082d576003830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166102001790556001830154835460408051928352602083019190915280517fffffffffffffffffffffffffffffffff0000000000000000000000000000000085169233927f882a9a1e0829db9c5f0f0d20f1fef1b6ebbf65df467aaf196d3fe73c4de222ae92918290030190a3505050565b600182015473ffffffffffffffffffffffffffffffffffffffff1615156139c857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f43617272696572206d757374206578697374206265666f7265206d61726b696e60448201527f67206120736869706d656e7420496e2050726f67726573730000000000000000606482015290519081900360840190fd5b600182015473ffffffffffffffffffffffffffffffffffffffff16331480613a095750600282015473ffffffffffffffffffffffffffffffffffffffff1633145b1515613a9c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4f6e6c792043617272696572206f72204d6f64657261746f7220616c6c6f776560448201527f6420746f2073657420496e2050726f6772657373000000000000000000000000606482015290519081900360840190fd5b6001600283015474010000000000000000000000000000000000000000900460ff166004811115613ac957fe5b14613b5b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4f6e6c79204372656174656420736869706d656e74732063616e206265206d6160448201527f726b656420496e2050726f677265737300000000000000000000000000000000606482015290519081900360840190fd5b6002820180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517fffffffffffffffffffffffffffffffff0000000000000000000000000000000082169033907f87a4ac61bb3d3fe4f2ae29fbfa51cc6da22d936ed4b363d5859d1e537f6a181090600090a35050565b6004600283015474010000000000000000000000000000000000000000900460ff166004811115613c1c57fe5b1415613c8957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f416c72656164792063616e63656c656400000000000000000000000000000000604482015290519081900360640190fd5b6001600283015474010000000000000000000000000000000000000000900460ff166004811115613cb657fe5b141580613cd95750815473ffffffffffffffffffffffffffffffffffffffff1633145b80613cfd5750600182015473ffffffffffffffffffffffffffffffffffffffff1633145b80613d215750600282015473ffffffffffffffffffffffffffffffffffffffff1633145b1515613dda57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f4f6e6c7920736869707065722c20636172726965722c206f72206d6f6465726160448201527f746f722063616e2063616e63656c20616e204372656174656420736869706d6560648201527f6e74000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b60028083015474010000000000000000000000000000000000000000900460ff166004811115613e0657fe5b141580613e2c5750600182015473ffffffffffffffffffffffffffffffffffffffff1633145b80613e505750600282015473ffffffffffffffffffffffffffffffffffffffff1633145b1515613ee357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f4f6e6c792063617272696572206f72206d6f64657261746f722063616e20636160448201527f6e63656c20616e20496e2050726f677265737320736869706d656e7400000000606482015290519081900360840190fd5b6003600283015474010000000000000000000000000000000000000000900460ff166004811115613f1057fe5b141580613f365750600282015473ffffffffffffffffffffffffffffffffffffffff1633145b1515613fc957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f6e6c79206d6f64657261746f722063616e2063616e63656c206120436f6d7060448201527f6c6574656420736869706d656e74000000000000000000000000000000000000606482015290519081900360840190fd5b6002820180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740400000000000000000000000000000000000000001790556040517fffffffffffffffffffffffffffffffff0000000000000000000000000000000082169033907f38531124c6e45eaee0b577b477b54019360d87f9cf20088028f303669c618fbf90600090a35050565b825473ffffffffffffffffffffffffffffffffffffffff16331461410757604080517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4f6e6c79205368697070657220616c6c6f77656420746f20736574205661756c60448201527f7455726900000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b816fffffffffffffffffffffffffffffffff19163373ffffffffffffffffffffffffffffffffffffffff167f7ad388571a80716ac44cbfcbfcd92ae8ea432b2c8717826bd05045f0ea1e72ac83604051808060200182810382528381815181526020019150805190602001908083836000838110156128a9578181015183820152602001612891565b73ffffffffffffffffffffffffffffffffffffffff811615156141b257600080fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b818101828110156131d457fe00a165627a7a7230582036fa965abc5fa909fc07bfaf6e3434632584b040206344b4f5629429418b51240029