<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><url><loc>https://one-proekt.ru/</loc><lastmod>2022-11-24</lastmod><changefreq>monthly</changefreq></url><url><loc>https://one-proekt.ru/about</loc><lastmod>2022-11-21</lastmod><changefreq>monthly</changefreq></url><url><loc>https://one-proekt.ru/contacts</loc><lastmod>2022-11-21</lastmod><changefreq>monthly</changefreq></url><url><loc>https://one-proekt.ru/projects</loc><lastmod>2022-11-21</lastmod><changefreq>monthly</changefreq></url><url><loc>https://one-proekt.ru/uslugi</loc><lastmod>2022-11-21</lastmod><changefreq>monthly</changefreq></url><url><loc>https://one-proekt.ru/uslugi/axxxipjp-tehnicheskij-zakazchik</loc><lastmod>2022-11-21</lastmod><changefreq>monthly</changefreq></url><url><loc>https://one-proekt.ru/uslugi/izmenenie-kategorii-i-vida-razreshyonnogo-ispolzovaniya-zemelnogo-uchastka</loc><lastmod>2022-11-21</lastmod><changefreq>monthly</changefreq></url><url><loc>https://one-proekt.ru/uslugi/odobrenie-na-uslovno-razreshennyj-vid-ispolzovaniya</loc><lastmod>2022-11-21</lastmod><changefreq>monthly</changefreq></url><url><loc>https://one-proekt.ru/uslugi/oformlenie-samostroya</loc><lastmod>2022-11-21</lastmod><changefreq>monthly</changefreq></url><url><loc>https://one-proekt.ru/uslugi/poluchenie-tu-na-gazifikaciyu</loc><lastmod>2022-11-21</lastmod><changefreq>monthly</changefreq></url><url><loc>https://one-proekt.ru/uslugi/poluchenie-tu-na-primykanie-k-avtomobilnym-dorogam</loc><lastmod>2022-11-21</lastmod><changefreq>monthly</changefreq></url><url><loc>https://one-proekt.ru/uslugi/razrabotka-proektnoj-dokumentacii</loc><lastmod>2022-11-21</lastmod><changefreq>monthly</changefreq></url><url><loc>https://one-proekt.ru/uslugi/razrabotka-proektov-planirovki-i-mezhevaniya-territorii</loc><lastmod>2022-11-21</lastmod><changefreq>monthly</changefreq></url><url><loc>https://one-proekt.ru/uslugi/snizhenie-kadastrovoj-stoimosti</loc><lastmod>2022-11-21</lastmod><changefreq>monthly</changefreq></url></urlset>HTTP/1.0 500 Internal Server Error
Cache-Control: must-revalidate
Connection: close
Content-Length: 177817
Content-Type: application/json
Date: Sat, 08 Aug 2026 04:51:07 GMT
Server: CouchDB/3.3.1 (Erlang OTP/24)
X-Couch-Request-ID: 2f38a42524
X-Couch-Stack-Hash: 3576297573
X-CouchDB-Body-Time: 0

{"error":"{timeout,{gen_server,call,\n                     [<0.20737.0>,\n                      {prompt,[<<\"ddoc\">>,<<\"new\">>,<<\"_design/assets\">>,\n                               {[{<<\"_id\">>,<<\"_design/assets\">>},\n                                 {<<\"_rev\">>,\n                                  <<\"8-b22a9c30f15bc3fb88d60330ec91bd88\">>},\n                                 {<<\"language\">>,<<\"erlang\">>},\n                                 {<<\"shows\">>,\n                                  {[{<<\"animation\">>,\n                                     <<\"fun(Doc, Req) ->\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Helpers\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_helpers_set = fun(Data, Key, Append) ->\\n    if Append /= null -> couch_util:json_apply_field({Key, Append}, Data); true -> Data end\\n  end,\\n\\n  Fun_helpers_to_list = fun(Value) ->\\n    if is_binary(Value) -> binary_to_list(Value);\\n    is_integer(Value) -> integer_to_list(Value);\\n    is_float(Value) -> float_to_list(Value);\\n    is_tuple(Value) -> tuple_to_list(Value);\\n    is_boolean(Value) -> if Value == true -> \\\"true\\\"; true -> \\\"false\\\" end;\\n    is_atom(Value) -> atom_to_list(Value);\\n    true -> Value end\\n  end,\\n\\n  Fun_helpers_to_integer = fun(Value) ->\\n    if is_integer(Value) ->\\n      Value;\\n    true ->\\n      if is_binary(Value) ->\\n        if byte_size(Value) > 0 ->\\n          case re:run(binary_to_list(Value), \\\"[^0-9]\\\", [global]) of\\n            nomatch -> binary_to_integer(Value);\\n            _ -> 0\\n          end;\\n        true -> 0 end;\\n      true ->\\n        if is_list(Value) ->\\n          if length(Value) > 0 ->\\n            case re:run(Value, \\\"[^0-9]\\\", [global]) of\\n              nomatch -> list_to_integer(Value);\\n              _ -> 0\\n            end;\\n          true -> 0 end;\\n        true ->\\n          if is_float(Value) ->\\n            list_to_integer(float_to_list(Value, [{decimals, 0}]));\\n          true -> 0 end\\n        end\\n      end\\n    end\\n  end,\\n\\n  Fun_helpers_for_each = fun(Json, Fn) ->\\n    ForEachDeep = fun([Head | Body], Acc, D) ->\\n      Result = Fn(Head),\\n      Length = length(Body),\\n      if Length /= 0 ->\\n        D(Body, [Result | Acc], D);\\n        true -> lists:reverse([Result | Acc]) end\\n    end,\\n    JsonLength = length(Json),\\n    if JsonLength /= 0 ->\\n      ForEachDeep(Json, [], ForEachDeep);\\n      true -> null end\\n  end,\\n\\n  Fun_helpers_to_string = fun(Value) ->\\n    lists:flatten(io_lib:format(\\\"~p\\\", [Value]))\\n  end,\\n\\n  Fun_helpers_get = fun(Data, Keys, Default) ->\\n    if length(Keys) > 1 ->\\n      GetWalker = fun(Data, [Key | Keys], D) ->\\n        if (is_integer(Key)) ->\\n          if (is_list(Data)) and (Key =< length(Data)) ->\\n            Value = lists:nth(Key, Data),\\n            case length(Keys) == 0 of\\n              true -> case Value of null -> Default; _ -> Value end;\\n              _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n            end;\\n            true -> Default end;\\n          true ->\\n            {DataList} = Data,\\n            case couch_util:get_value(Key, DataList, null) of\\n              null -> Default;\\n              Value -> case length(Keys) == 0 of\\n                true -> case Value of null -> Default; _ -> Value end;\\n                _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n              end\\n            end\\n        end\\n      end,\\n      GetWalker(Data, Keys, GetWalker);\\n    true ->\\n      {Unwrap} = Data,\\n      [Key | _] = Keys,\\n      couch_util:get_value(Key, Unwrap, Default)\\n    end\\n  end,\\n\\n  Fun_helpers_error = fun(Message) ->\\n    throw({[{<<\\\"forbidden\\\">>, Fun_helpers_to_string(Message)}]})\\n  end,\\n\\n \\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Main\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n\\n    Param = Fun_helpers_get(Req, [<<\\\"query\\\">>, <<\\\"list\\\">>], null),\\n\\n  Walker = fun([Rule | Body], Acc, List, W) ->\\n    {Key, Value} = Rule,\\n    Check = lists:any(fun(X) -> X == Key end, List),\\n    AppendAcc = if Check == true -> [Value]; true -> [] end,\\n    if length(Body) > 0 -> W(Body, lists:append(Acc, AppendAcc), List, W); true -> lists:append(Acc, AppendAcc) end\\n  end,\\n\\n  Styles = if Param /= null ->\\n    ParamList = binary_to_list(Param),\\n    if length(ParamList) < 2048 ->\\n      if Doc /= null ->\\n        Data = Fun_helpers_get(Doc, [<<\\\"data\\\">>], null),\\n        if Data /= null ->\\n          List = lists:map(fun(Item) -> list_to_binary(Item) end, lists:filter(fun(Item) -> if length(Item) > 0 -> true; true -> false end end, lists:map(fun(Item) -> string:trim(Item) end, string:split(ParamList, \\\",\\\", all)))),\\n          if length(List) > 0 ->\\n            {Unwrap} = Data,\\n            Walker(Unwrap, [], List, Walker);\\n          true -> [] end;\\n        true -> [] end;\\n      true -> [] end;\\n    true -> [] end;\\n  true -> [] end,\\n\\n  {[\\n    {<<\\\"body\\\">>, list_to_binary(Styles)},\\n    {<<\\\"headers\\\">>, {[\\n      {<<\\\"Content-Type\\\">>, <<\\\"text/css\\\">>},\\n      {<<\\\"Cache-Control\\\">>, <<\\\"max-age=315360000\\\">>}\\n    ]}}\\n  ]}\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n\\nend.\">>},\n                                    {<<\"asset\">>,\n                                     <<\"fun(Doc, Req) ->\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Helpers\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_helpers_set = fun(Data, Key, Append) ->\\n    if Append /= null -> couch_util:json_apply_field({Key, Append}, Data); true -> Data end\\n  end,\\n\\n  Fun_helpers_to_list = fun(Value) ->\\n    if is_binary(Value) -> binary_to_list(Value);\\n    is_integer(Value) -> integer_to_list(Value);\\n    is_float(Value) -> float_to_list(Value);\\n    is_tuple(Value) -> tuple_to_list(Value);\\n    is_boolean(Value) -> if Value == true -> \\\"true\\\"; true -> \\\"false\\\" end;\\n    is_atom(Value) -> atom_to_list(Value);\\n    true -> Value end\\n  end,\\n\\n  Fun_helpers_to_integer = fun(Value) ->\\n    if is_integer(Value) ->\\n      Value;\\n    true ->\\n      if is_binary(Value) ->\\n        if byte_size(Value) > 0 ->\\n          case re:run(binary_to_list(Value), \\\"[^0-9]\\\", [global]) of\\n            nomatch -> binary_to_integer(Value);\\n            _ -> 0\\n          end;\\n        true -> 0 end;\\n      true ->\\n        if is_list(Value) ->\\n          if length(Value) > 0 ->\\n            case re:run(Value, \\\"[^0-9]\\\", [global]) of\\n              nomatch -> list_to_integer(Value);\\n              _ -> 0\\n            end;\\n          true -> 0 end;\\n        true ->\\n          if is_float(Value) ->\\n            list_to_integer(float_to_list(Value, [{decimals, 0}]));\\n          true -> 0 end\\n        end\\n      end\\n    end\\n  end,\\n\\n  Fun_helpers_for_each = fun(Json, Fn) ->\\n    ForEachDeep = fun([Head | Body], Acc, D) ->\\n      Result = Fn(Head),\\n      Length = length(Body),\\n      if Length /= 0 ->\\n        D(Body, [Result | Acc], D);\\n        true -> lists:reverse([Result | Acc]) end\\n    end,\\n    JsonLength = length(Json),\\n    if JsonLength /= 0 ->\\n      ForEachDeep(Json, [], ForEachDeep);\\n      true -> null end\\n  end,\\n\\n  Fun_helpers_to_string = fun(Value) ->\\n    lists:flatten(io_lib:format(\\\"~p\\\", [Value]))\\n  end,\\n\\n  Fun_helpers_get = fun(Data, Keys, Default) ->\\n    if length(Keys) > 1 ->\\n      GetWalker = fun(Data, [Key | Keys], D) ->\\n        if (is_integer(Key)) ->\\n          if (is_list(Data)) and (Key =< length(Data)) ->\\n            Value = lists:nth(Key, Data),\\n            case length(Keys) == 0 of\\n              true -> case Value of null -> Default; _ -> Value end;\\n              _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n            end;\\n            true -> Default end;\\n          true ->\\n            {DataList} = Data,\\n            case couch_util:get_value(Key, DataList, null) of\\n              null -> Default;\\n              Value -> case length(Keys) == 0 of\\n                true -> case Value of null -> Default; _ -> Value end;\\n                _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n              end\\n            end\\n        end\\n      end,\\n      GetWalker(Data, Keys, GetWalker);\\n    true ->\\n      {Unwrap} = Data,\\n      [Key | _] = Keys,\\n      couch_util:get_value(Key, Unwrap, Default)\\n    end\\n  end,\\n\\n  Fun_helpers_error = fun(Message) ->\\n    throw({[{<<\\\"forbidden\\\">>, Fun_helpers_to_string(Message)}]})\\n  end,\\n\\n  Fun_helpers_no_cache_headers = fun() ->\\n    {[{<<\\\"Cache-Control\\\">>, <<\\\"no-cache, no-store, must-revalidate\\\">>}, {<<\\\"Expires\\\">>, <<\\\"0\\\">>}, {<<\\\"Pragma\\\">>, <<\\\"no-cache\\\">>}]}\\n  end,\\n\\n \\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Main\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n\\n    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n\\n  {[\\n    {<<\\\"json\\\">>, {[]}},\\n    {<<\\\"headers\\\">>, Fun_helpers_no_cache_headers()}\\n  ]}\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n\\nend.\">>},\n                                    {<<\"blocks\">>,\n                                     <<\"fun(Doc, Req) ->\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Helpers\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_helpers_set = fun(Data, Key, Append) ->\\n    if Append /= null -> couch_util:json_apply_field({Key, Append}, Data); true -> Data end\\n  end,\\n\\n  Fun_helpers_to_list = fun(Value) ->\\n    if is_binary(Value) -> binary_to_list(Value);\\n    is_integer(Value) -> integer_to_list(Value);\\n    is_float(Value) -> float_to_list(Value);\\n    is_tuple(Value) -> tuple_to_list(Value);\\n    is_boolean(Value) -> if Value == true -> \\\"true\\\"; true -> \\\"false\\\" end;\\n    is_atom(Value) -> atom_to_list(Value);\\n    true -> Value end\\n  end,\\n\\n  Fun_helpers_to_integer = fun(Value) ->\\n    if is_integer(Value) ->\\n      Value;\\n    true ->\\n      if is_binary(Value) ->\\n        if byte_size(Value) > 0 ->\\n          case re:run(binary_to_list(Value), \\\"[^0-9]\\\", [global]) of\\n            nomatch -> binary_to_integer(Value);\\n            _ -> 0\\n          end;\\n        true -> 0 end;\\n      true ->\\n        if is_list(Value) ->\\n          if length(Value) > 0 ->\\n            case re:run(Value, \\\"[^0-9]\\\", [global]) of\\n              nomatch -> list_to_integer(Value);\\n              _ -> 0\\n            end;\\n          true -> 0 end;\\n        true ->\\n          if is_float(Value) ->\\n            list_to_integer(float_to_list(Value, [{decimals, 0}]));\\n          true -> 0 end\\n        end\\n      end\\n    end\\n  end,\\n\\n  Fun_helpers_for_each = fun(Json, Fn) ->\\n    ForEachDeep = fun([Head | Body], Acc, D) ->\\n      Result = Fn(Head),\\n      Length = length(Body),\\n      if Length /= 0 ->\\n        D(Body, [Result | Acc], D);\\n        true -> lists:reverse([Result | Acc]) end\\n    end,\\n    JsonLength = length(Json),\\n    if JsonLength /= 0 ->\\n      ForEachDeep(Json, [], ForEachDeep);\\n      true -> null end\\n  end,\\n\\n  Fun_helpers_to_string = fun(Value) ->\\n    lists:flatten(io_lib:format(\\\"~p\\\", [Value]))\\n  end,\\n\\n  Fun_helpers_get = fun(Data, Keys, Default) ->\\n    if length(Keys) > 1 ->\\n      GetWalker = fun(Data, [Key | Keys], D) ->\\n        if (is_integer(Key)) ->\\n          if (is_list(Data)) and (Key =< length(Data)) ->\\n            Value = lists:nth(Key, Data),\\n            case length(Keys) == 0 of\\n              true -> case Value of null -> Default; _ -> Value end;\\n              _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n            end;\\n            true -> Default end;\\n          true ->\\n            {DataList} = Data,\\n            case couch_util:get_value(Key, DataList, null) of\\n              null -> Default;\\n              Value -> case length(Keys) == 0 of\\n                true -> case Value of null -> Default; _ -> Value end;\\n                _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n              end\\n            end\\n        end\\n      end,\\n      GetWalker(Data, Keys, GetWalker);\\n    true ->\\n      {Unwrap} = Data,\\n      [Key | _] = Keys,\\n      couch_util:get_value(Key, Unwrap, Default)\\n    end\\n  end,\\n\\n  Fun_helpers_error = fun(Message) ->\\n    throw({[{<<\\\"forbidden\\\">>, Fun_helpers_to_string(Message)}]})\\n  end,\\n\\n \\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Main\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n\\n    Param = Fun_helpers_get(Req, [<<\\\"query\\\">>, <<\\\"list\\\">>], null),\\n\\n  Walker = fun([Rule | Body], Acc, List, W) ->\\n    {Key, Value} = Rule,\\n    Check = lists:any(fun(X) -> X == Key end, List),\\n    AppendAcc = if Check == true -> [Value]; true -> [] end,\\n    if length(Body) > 0 -> W(Body, lists:append(Acc, AppendAcc), List, W); true -> lists:append(Acc, AppendAcc) end\\n  end,\\n\\n  Styles = if Param /= null ->\\n    ParamList = binary_to_list(Param),\\n    if length(ParamList) < 2048 ->\\n      if Doc /= null ->\\n        Data = Fun_helpers_get(Doc, [<<\\\"data\\\">>], null),\\n        if Data /= null ->\\n          List = lists:map(fun(Item) -> list_to_binary(Item) end, lists:filter(fun(Item) -> if length(Item) > 0 -> true; true -> false end end, lists:map(fun(Item) -> string:trim(Item) end, string:split(ParamList, \\\",\\\", all)))),\\n          if length(List) > 0 ->\\n            {Unwrap} = Data,\\n            Walker(Unwrap, [], List, Walker);\\n          true -> [] end;\\n        true -> [] end;\\n      true -> [] end;\\n    true -> [] end;\\n  true -> [] end,\\n\\n  {[\\n    {<<\\\"body\\\">>, list_to_binary(Styles)},\\n    {<<\\\"headers\\\">>, {[\\n      {<<\\\"Content-Type\\\">>, <<\\\"text/css\\\">>},\\n      {<<\\\"Cache-Control\\\">>, <<\\\"max-age=315360000\\\">>}\\n    ]}}\\n  ]}\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n\\nend.\">>},\n                                    {<<\"custom\">>,\n                                     <<\"fun(Doc, Req) ->\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Defines\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  MEDIA = <<\\\"https://media.isite.app\\\">>,\\n  DEBUG = false,\\n  SERVER = <<\\\"https://database.isite.app\\\">>,\\n  CONTAINER = <<\\\"database\\\">>,\\n  DATABASE = <<\\\"isite\\\">>,\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Helpers\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_helpers_set = fun(Data, Key, Append) ->\\n    if Append /= null -> couch_util:json_apply_field({Key, Append}, Data); true -> Data end\\n  end,\\n\\n  Fun_helpers_to_list = fun(Value) ->\\n    if is_binary(Value) -> binary_to_list(Value);\\n    is_integer(Value) -> integer_to_list(Value);\\n    is_float(Value) -> float_to_list(Value);\\n    is_tuple(Value) -> tuple_to_list(Value);\\n    is_boolean(Value) -> if Value == true -> \\\"true\\\"; true -> \\\"false\\\" end;\\n    is_atom(Value) -> atom_to_list(Value);\\n    true -> Value end\\n  end,\\n\\n  Fun_helpers_to_integer = fun(Value) ->\\n    if is_integer(Value) ->\\n      Value;\\n    true ->\\n      if is_binary(Value) ->\\n        if byte_size(Value) > 0 ->\\n          case re:run(binary_to_list(Value), \\\"[^0-9]\\\", [global]) of\\n            nomatch -> binary_to_integer(Value);\\n            _ -> 0\\n          end;\\n        true -> 0 end;\\n      true ->\\n        if is_list(Value) ->\\n          if length(Value) > 0 ->\\n            case re:run(Value, \\\"[^0-9]\\\", [global]) of\\n              nomatch -> list_to_integer(Value);\\n              _ -> 0\\n            end;\\n          true -> 0 end;\\n        true ->\\n          if is_float(Value) ->\\n            list_to_integer(float_to_list(Value, [{decimals, 0}]));\\n          true -> 0 end\\n        end\\n      end\\n    end\\n  end,\\n\\n  Fun_helpers_for_each = fun(Json, Fn) ->\\n    ForEachDeep = fun([Head | Body], Acc, D) ->\\n      Result = Fn(Head),\\n      Length = length(Body),\\n      if Length /= 0 ->\\n        D(Body, [Result | Acc], D);\\n        true -> lists:reverse([Result | Acc]) end\\n    end,\\n    JsonLength = length(Json),\\n    if JsonLength /= 0 ->\\n      ForEachDeep(Json, [], ForEachDeep);\\n      true -> null end\\n  end,\\n\\n  Fun_helpers_to_string = fun(Value) ->\\n    lists:flatten(io_lib:format(\\\"~p\\\", [Value]))\\n  end,\\n\\n  Fun_helpers_get = fun(Data, Keys, Default) ->\\n    if length(Keys) > 1 ->\\n      GetWalker = fun(Data, [Key | Keys], D) ->\\n        if (is_integer(Key)) ->\\n          if (is_list(Data)) and (Key =< length(Data)) ->\\n            Value = lists:nth(Key, Data),\\n            case length(Keys) == 0 of\\n              true -> case Value of null -> Default; _ -> Value end;\\n              _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n            end;\\n            true -> Default end;\\n          true ->\\n            {DataList} = Data,\\n            case couch_util:get_value(Key, DataList, null) of\\n              null -> Default;\\n              Value -> case length(Keys) == 0 of\\n                true -> case Value of null -> Default; _ -> Value end;\\n                _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n              end\\n            end\\n        end\\n      end,\\n      GetWalker(Data, Keys, GetWalker);\\n    true ->\\n      {Unwrap} = Data,\\n      [Key | _] = Keys,\\n      couch_util:get_value(Key, Unwrap, Default)\\n    end\\n  end,\\n\\n  Fun_helpers_error = fun(Message) ->\\n    throw({[{<<\\\"forbidden\\\">>, Fun_helpers_to_string(Message)}]})\\n  end,\\n\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Multisite\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_multisite_id_cut = fun(Id, Multisite) ->\\n    if Id /= null ->\\n      Type = re:replace(binary_to_list(Id), \\\"^([^\\\\/]*)\\\\/.*\\\", \\\"\\\\\\\\1\\\", [global, {return, list}]),\\n      Walker = fun([Key | Body], W) ->\\n        Match = re:run(binary_to_list(Id), couch_util:implode([Type, \\\"/\\\", binary_to_list(Key)], \\\"\\\"), [global]),\\n        Test = case Match of {match, _} -> true; _ -> false end,\\n        if Test == true ->\\n          Strip = re:replace(binary_to_list(Id), couch_util:implode([\\\"^\\\", Type, \\\"|\\\", binary_to_list(Key), \\\"\\\\/\\\"], \\\"\\\"), \\\"\\\", [global, {return, list}]),\\n          list_to_binary(couch_util:implode([Type, Strip], \\\"\\\"));\\n        true ->\\n          if length(Body) > 0 -> W(Body, W); true -> Id end\\n        end\\n      end,\\n  \\n      if length(Type) > 0 ->\\n        Keys = Fun_helpers_get(Multisite, [<<\\\"keys\\\">>], []),\\n        if length(Keys) > 0 -> Walker(Keys, Walker); true -> Id end;\\n      true -> Id end;\\n    true -> null end\\n  end,\\n\\n  Fun_multisite_id_add = fun(Id, Multisite, Site) ->\\n    if Id /= null ->\\n      Type = re:replace(binary_to_list(Id), \\\"^([^\\\\/]*)\\\\/.*\\\", \\\"\\\\\\\\1\\\", [global, {return, list}]),\\n      Walker = fun([Pattern | Body], Clear, Key, W) ->\\n        Match = re:run(Clear, binary_to_list(Pattern), [global]),\\n        Test = case Match of {match, _} -> true; _ -> false end,\\n        if Test == true ->\\n          if Key /= <<\\\"main\\\">> ->\\n            Strip = re:replace(Clear, couch_util:implode([\\\"^\\\", Type, \\\"\\\\/\\\"], \\\"\\\"), \\\"\\\", [{return, list}]),\\n            list_to_binary(couch_util:implode([Type, \\\"/\\\", binary_to_list(Key), \\\"/\\\", Strip], \\\"\\\"));\\n          true -> list_to_binary(Clear) end;\\n        true ->\\n          if length(Body) > 0 -> W(Body, Clear, Key, W); true -> Clear end\\n        end\\n      end,\\n  \\n      if length(Type) > 0 ->\\n        Cut = Fun_multisite_id_cut(Id, Multisite),\\n        Key = Fun_helpers_get(Site, [<<\\\"key\\\">>], <<\\\"main\\\">>),\\n        List = Fun_helpers_get(Site, [<<\\\"docs\\\">>], []),\\n        if length(List) > 0 -> Walker(List, binary_to_list(Cut), Key, Walker); true -> Cut end;\\n      true -> Id end;\\n    true -> null end\\n  end,\\n\\n  Fun_multisite_get_setting = fun(List, Id, Multisite, Site) ->\\n    if length(List) > 0 ->\\n      MultisiteKey = Fun_multisite_id_add(Id, Multisite, Site),\\n      MainKey = Fun_multisite_id_cut(Id, Multisite),\\n      MultisiteSetting = lists:filter(fun(Item) -> ItemKey = Fun_helpers_get(Item, [<<\\\"_id\\\">>], null), if ItemKey /= null -> if ItemKey == MultisiteKey -> true; true -> false end; true -> false end end, List),\\n      MainSetting = lists:filter(fun(Item) -> ItemKey = Fun_helpers_get(Item, [<<\\\"_id\\\">>], null), if ItemKey /= null -> if ItemKey == MainKey -> true; true -> false end; true -> false end end, List),\\n      if length(MultisiteSetting) > 0 -> [F | _] = MultisiteSetting, F; true -> if length(MainSetting) > 0 -> [F | _] = MainSetting, F; true -> null end end;\\n    true -> null end\\n  end,\\n\\n  Fun_multisite_get_all = fun(List) ->\\n    Keys = sets:to_list(sets:from_list(lists:map(fun(Item) -> Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"key\\\">>], <<\\\"main\\\">>) end, List))),\\n    Languages = sets:to_list(sets:from_list(lists:map(fun(Item) -> Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"language\\\">>], <<\\\"en\\\">>) end, List))),\\n    All = lists:map(fun(Item) -> {[{<<\\\"key\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"key\\\">>], <<\\\"main\\\">>)}, {<<\\\"domain\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"domain\\\">>], <<\\\"localhost\\\">>)}, {<<\\\"prefix\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"prefix\\\">>], <<\\\"\\\">>)}, {<<\\\"language\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"language\\\">>], <<\\\"en\\\">>)}, {<<\\\"aliases\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"aliases\\\">>], [])}, {<<\\\"docs\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"docs\\\">>], [])}]} end, List),\\n    {[{<<\\\"keys\\\">>, Keys}, {<<\\\"languages\\\">>, Languages}, {<<\\\"users\\\">>, []}, {<<\\\"sites\\\">>, All}]}\\n  end,\\n\\n  Fun_multisite_get_site = fun(Domain, Prefix, Multisite) ->\\n    MultisiteSites = Fun_helpers_get(Multisite, [<<\\\"sites\\\">>], []),\\n    MultisiteDomain = lists:filter(fun(Item) -> D = Fun_helpers_get(Item, [<<\\\"domain\\\">>], null), if D == Domain -> true; true -> false end end, MultisiteSites),\\n  \\n    GetMainSite = fun(SL) ->\\n      TL = lists:filter(fun(I) -> K = Fun_helpers_get(I, [<<\\\"key\\\">>], null), if K == <<\\\"main\\\">> -> true; true -> false end end, SL),\\n      if length(TL) > 0 -> [TF | _] = TL, TF; true ->\\n        {[{<<\\\"key\\\">>, <<\\\"main\\\">>}, {<<\\\"domain\\\">>, <<\\\"localhost\\\">>}, {<<\\\"prefix\\\">>, <<\\\"\\\">>}, {<<\\\"language\\\">>, <<\\\"ru\\\">>}, {<<\\\"aliases\\\">>, []}, {<<\\\"docs\\\">>, []}]}\\n      end\\n    end,\\n  \\n    if length(MultisiteDomain) > 0 ->\\n      if length(MultisiteDomain) == 1 -> [MF1 | _] = MultisiteDomain, MF1; true ->\\n        MultisitePrefix = lists:filter(fun(Item) -> P = Fun_helpers_get(Item, [<<\\\"prefix\\\">>], <<\\\"\\\">>), if P == Prefix -> true; true -> false end end, MultisiteDomain),\\n        if length(MultisitePrefix) > 0 -> [MF2 | _] = MultisitePrefix, MF2; true -> GetMainSite(MultisiteSites) end\\n      end;\\n    true ->\\n      GetMainSite(MultisiteSites)\\n    end\\n  end,\\n\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Couchdb\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_couchdb_get_doc = fun(Id) ->\\n    DesignUrl = if DEBUG == true -> couch_util:implode([binary_to_list(SERVER), \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", http_uri:encode(binary_to_list(Id))], \\\"\\\"); true -> couch_util:implode([\\\"http://\\\", binary_to_list(CONTAINER), \\\":5984\\\", \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", http_uri:encode(binary_to_list(Id))], \\\"\\\") end,\\n    case ibrowse:send_req(DesignUrl, [], get, [], [{connect_timeout, 60000}], 60000) of {ok, _, _, Body} -> couch_util:json_decode(Body); _ -> {[{}]} end\\n  end,\\n\\n  Fun_couchdb_put_doc = fun(DocObject) ->\\n    Id = Fun_helpers_get(DocObject, [<<\\\"_id\\\">>], null),\\n    Url = if DEBUG == true -> couch_util:implode([binary_to_list(SERVER), \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", http_uri:encode(binary_to_list(Id))], \\\"\\\"); true -> couch_util:implode([\\\"http://\\\", binary_to_list(CONTAINER), \\\":5984\\\", \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", http_uri:encode(binary_to_list(Id))], \\\"\\\") end,\\n    EncodeJson = couch_util:json_encode(DocObject),\\n  \\n    case ibrowse:send_req(Url, [{\\\"Content-Type\\\", \\\"application/json\\\"}], put, EncodeJson, [{connect_timeout, 60000}], 60000) of\\n      {ok, _, _, Body} -> try couch_util:json_decode(Body) catch _:_ -> {[]} end;\\n      Error -> Error\\n    end\\n  end,\\n\\n  Fun_couchdb_get_view = fun(View, Params) ->\\n    case string:split(View, \\\"/\\\", all) of\\n      [DesignName, DesignView] ->\\n        QueryString = case Params of\\n          {Unwrap} ->\\n            if length(Unwrap) > 0 -> couch_util:implode(lists:filter(fun(Item) ->\\n              if Item /= null -> true; true -> false end\\n            end, lists:map(fun(Item) ->\\n              case Item of\\n                {Key, Value} -> list_to_binary([binary_to_list(Key), \\\"=\\\", binary_to_list(Value)]);\\n                _ -> null\\n              end\\n            end, Unwrap)), \\\"&\\\");\\n              true -> \\\"\\\"\\n            end;\\n          _ -> \\\"\\\"\\n        end,\\n        DesignUrl = if DEBUG == true ->\\n          couch_util:implode([binary_to_list(SERVER), \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", \\\"_design\\\", \\\"/\\\", binary_to_list(DesignName), \\\"/\\\", \\\"_view\\\", \\\"/\\\", binary_to_list(DesignView), \\\"?\\\", QueryString], \\\"\\\");\\n        true ->\\n          couch_util:implode([\\\"http://\\\", binary_to_list(CONTAINER), \\\":5984\\\", \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", \\\"_design\\\", \\\"/\\\", binary_to_list(DesignName), \\\"/\\\", \\\"_view\\\", \\\"/\\\", binary_to_list(DesignView), \\\"?\\\", QueryString], \\\"\\\")\\n        end,\\n        case ibrowse:send_req(DesignUrl, [], get, [], [{connect_timeout, 60000}], 60000) of\\n          {ok, _, _, Body} -> couch_util:json_decode(Body);\\n          _ -> {[{}]}\\n        end;\\n      _ -> {[]}\\n    end\\n  end,\\n\\n \\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Main\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n\\n    Host = Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"X-Forwarded-Host\\\">>], Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"x-forwarded-host\\\">>], Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"Host\\\">>], Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"host\\\">>], null)))),\\n  Domain = if Host /= null -> re:replace(binary_to_list(Host), \\\"^(.*)\\\\:[0-9]*$\\\", \\\"\\\\\\\\1\\\", [{return, binary}]); true -> <<\\\"localhost\\\">> end,\\n  Prefix = Fun_helpers_get(Req, [<<\\\"query\\\">>, <<\\\"prefix\\\">>], <<\\\"\\\">>),\\n  Database = case Fun_helpers_get(Req, [<<\\\"info\\\">>, <<\\\"db_name\\\">>], null) of null -> <<\\\"debug\\\">>; DB -> re:replace(binary_to_list(DB), \\\"^default\\\\/\\\", \\\"\\\", [{return, binary}]) end,\\n\\n  Request = Fun_couchdb_get_view(<<\\\"system/setting\\\">>, {[{<<\\\"include_docs\\\">>, <<\\\"true\\\">>}, {<<\\\"limit\\\">>, <<\\\"1000\\\">>}]}),\\n  Docs = Fun_helpers_get(Request, [<<\\\"rows\\\">>], []),\\n\\n  Sites = lists:filter(fun(Item) -> case Fun_helpers_get(Item, [<<\\\"type\\\">>], null) of <<\\\"site\\\">> -> true; _ -> false end end, lists:filter(fun(Item) -> if Item /= null -> true; true -> false end end, lists:map(fun(Item) -> Fun_helpers_get(Item, [<<\\\"doc\\\">>], null) end, Docs))),\\n  Multisite = Fun_multisite_get_all(Sites),\\n  Site = Fun_multisite_get_site(Domain, Prefix, Multisite),\\n  Settings = lists:filter(fun(Item) -> case Fun_multisite_id_cut(Fun_helpers_get(Item, [<<\\\"_id\\\">>], null), Multisite) of <<\\\"setting/custom\\\">> -> true; _ -> false end end, lists:filter(fun(Item) -> if Item /= null -> true; true -> false end end, lists:map(fun(Item) -> Fun_helpers_get(Item, [<<\\\"doc\\\">>], null) end, Docs))),\\n  SettingDoc = Fun_multisite_get_setting(Settings, <<\\\"setting/custom\\\">>, Multisite, Site),\\n\\n  Hash = if SettingDoc /= null -> Fun_helpers_get(SettingDoc, [<<\\\"_rev\\\">>], <<\\\"none\\\">>); true -> <<\\\"none\\\">> end,\\n  IfMatchHash = list_to_binary(couch_util:implode([\\\"\\\\\\\"\\\", binary_to_list(Hash), \\\"\\\\\\\"\\\"], \\\"\\\")),\\n  IfMatch = Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"If-None-Match\\\">>], Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"if-none-match\\\">>], <<\\\"\\\">>)),\\n\\n  if IfMatch == IfMatchHash ->\\n    {[\\n      {<<\\\"code\\\">>, 304},\\n      {<<\\\"body\\\">>, <<\\\"\\\">>},\\n      {<<\\\"headers\\\">>, {[\\n        {<<\\\"Content-Type\\\">>, <<\\\"text/css\\\">>}\\n      ]}}\\n    ]};\\n  true ->\\n    Styles = if length(Settings) > 0 ->\\n      if SettingDoc /= null -> lists:map(fun(Item) -> [\\n        \\\"@font-face {\\\\n\\\",\\n        \\\"  font-family: \\\\\\\"\\\", Fun_helpers_get(Item, [<<\\\"font\\\">>], []), \\\"\\\\\\\";\\\\n\\\",\\n        \\\"  font-weight: \\\", Fun_helpers_get(Item, [<<\\\"weight\\\">>], []), \\\";\\\\n\\\",\\n        \\\"  font-style: \\\", Fun_helpers_get(Item, [<<\\\"style\\\">>], []), \\\";\\\\n\\\",\\n        \\\"  font-display: swap;\\\\n\\\", \\\"  src: url(\\\\\\\"\\\", MEDIA, \\\"/\\\", Database, \\\"/\\\", http_uri:encode(Fun_helpers_get(SettingDoc, [<<\\\"_id\\\">>], <<\\\"setting/custom\\\">>)), \\\"/\\\", Fun_helpers_get(Item, [<<\\\"hex\\\">>], []), \\\"\\\\\\\") format(\\\\\\\"woff2\\\\\\\");\\\\n\\\",\\n        \\\"}\\\\n\\\\n\\\"] end, Fun_helpers_get(SettingDoc, [<<\\\"data\\\">>], []));\\n      true -> [\\\" \\\"] end;\\n    true -> [\\\" \\\"] end,\\n\\n    {[\\n      {<<\\\"code\\\">>, 200},\\n      {<<\\\"body\\\">>, Styles},\\n      {<<\\\"headers\\\">>, {[\\n        {<<\\\"Content-Type\\\">>, <<\\\"text/css\\\">>},\\n        {<<\\\"ETag\\\">>, Hash}\\n      ]}}\\n    ]}\\n  end\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n\\nend.\">>},\n                                    {<<\"favicon\">>,\n                                     <<\"fun(Doc, Req) ->\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Helpers\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_helpers_set = fun(Data, Key, Append) ->\\n    if Append /= null -> couch_util:json_apply_field({Key, Append}, Data); true -> Data end\\n  end,\\n\\n  Fun_helpers_to_list = fun(Value) ->\\n    if is_binary(Value) -> binary_to_list(Value);\\n    is_integer(Value) -> integer_to_list(Value);\\n    is_float(Value) -> float_to_list(Value);\\n    is_tuple(Value) -> tuple_to_list(Value);\\n    is_boolean(Value) -> if Value == true -> \\\"true\\\"; true -> \\\"false\\\" end;\\n    is_atom(Value) -> atom_to_list(Value);\\n    true -> Value end\\n  end,\\n\\n  Fun_helpers_to_integer = fun(Value) ->\\n    if is_integer(Value) ->\\n      Value;\\n    true ->\\n      if is_binary(Value) ->\\n        if byte_size(Value) > 0 ->\\n          case re:run(binary_to_list(Value), \\\"[^0-9]\\\", [global]) of\\n            nomatch -> binary_to_integer(Value);\\n            _ -> 0\\n          end;\\n        true -> 0 end;\\n      true ->\\n        if is_list(Value) ->\\n          if length(Value) > 0 ->\\n            case re:run(Value, \\\"[^0-9]\\\", [global]) of\\n              nomatch -> list_to_integer(Value);\\n              _ -> 0\\n            end;\\n          true -> 0 end;\\n        true ->\\n          if is_float(Value) ->\\n            list_to_integer(float_to_list(Value, [{decimals, 0}]));\\n          true -> 0 end\\n        end\\n      end\\n    end\\n  end,\\n\\n  Fun_helpers_for_each = fun(Json, Fn) ->\\n    ForEachDeep = fun([Head | Body], Acc, D) ->\\n      Result = Fn(Head),\\n      Length = length(Body),\\n      if Length /= 0 ->\\n        D(Body, [Result | Acc], D);\\n        true -> lists:reverse([Result | Acc]) end\\n    end,\\n    JsonLength = length(Json),\\n    if JsonLength /= 0 ->\\n      ForEachDeep(Json, [], ForEachDeep);\\n      true -> null end\\n  end,\\n\\n  Fun_helpers_to_string = fun(Value) ->\\n    lists:flatten(io_lib:format(\\\"~p\\\", [Value]))\\n  end,\\n\\n  Fun_helpers_get = fun(Data, Keys, Default) ->\\n    if length(Keys) > 1 ->\\n      GetWalker = fun(Data, [Key | Keys], D) ->\\n        if (is_integer(Key)) ->\\n          if (is_list(Data)) and (Key =< length(Data)) ->\\n            Value = lists:nth(Key, Data),\\n            case length(Keys) == 0 of\\n              true -> case Value of null -> Default; _ -> Value end;\\n              _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n            end;\\n            true -> Default end;\\n          true ->\\n            {DataList} = Data,\\n            case couch_util:get_value(Key, DataList, null) of\\n              null -> Default;\\n              Value -> case length(Keys) == 0 of\\n                true -> case Value of null -> Default; _ -> Value end;\\n                _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n              end\\n            end\\n        end\\n      end,\\n      GetWalker(Data, Keys, GetWalker);\\n    true ->\\n      {Unwrap} = Data,\\n      [Key | _] = Keys,\\n      couch_util:get_value(Key, Unwrap, Default)\\n    end\\n  end,\\n\\n  Fun_helpers_error = fun(Message) ->\\n    throw({[{<<\\\"forbidden\\\">>, Fun_helpers_to_string(Message)}]})\\n  end,\\n\\n \\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Main\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n\\n    Favicon32 = <<\\\"iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAIKADAAQAAAABAAAAIAAAAACshmLzAAADPklEQVRYCc2XW4hNURjHZ4wZI0LMYHIJIUpySW415FLIC2KkJjK5paRciskDmTd5MA8UDzKIPFEuDzIeJqR4EMqtmTFGxsPInXH9/Y+1T9/ec/Y++2wv89Vvr+9b6/u+9Z291lnrnLy8LibjqOcMHIOymLWV4FcNDdAGHfAGboH6h4CVGRjXodx2Si+Cl/DHcZs2m2zC4QMo5h6cggNQCyroJ3yBg1AIveE5yH81+GQ0lje52t/Q3efhN2ow5fcY5kImGUbnaZDfHbjgdNlrwCea7AloUOg1hYmql88L6BPmZPq3ousDebnVVprxtFqKtge2Q690r18pxnwFSjLLPxRpaWlsAesivSMGK1yitxE+mYa60XnfxaqQKjmpM1dZ6AIe5hioJdhhYgqkJylgpEsy3CSLq9bj+MA5p+ZOUoC3N0aRSLs8VznuAhK/gRaXIJ/2LER9VZ2rr7nkrFQBeowAnVZ6tWNhAkyG6fAIfoGVaRizXYeWYT40QSPEkfc4aRPqXGhWgIww+sohICosk38T/UdgKfSD2LIKT51K+6EdbPJMBeCSp9do/YK63pqO5sOwGHpALFmOl00WVsAA/G4GfG1cUP+Ibx14S4eaWbQXbHBYAYrW5VINOpBsTDb9Kv6DIKNowCaIKsBL0BNlMzSAXr2ND9Nb8RsPnSRJATaJlkZ76ijolgxeQLYgnaQq3if/W4AvGYYKWgHn4DPYAqRvAJ9kK2AK3k9hqi8qnjEYtytgi6gPhmYrQLtYCXYFA3OwL7ocytOa5C7QXEv0SCgbidNPNUlJ0gLmEDwmlSL3Rxsh+uUlaU9aQD7Be1Mpkj3eubBnSQtQ/FrIerK5iWyjOSe5jmt2QHrcTagNJF5Drr8JdHsq9hMMBJ8MxfKSqw2ehN63wPpoPePuh/74trg5dtJ2ki302OTzAh62gG+MnXf+WtMqKIAwmcjAXVD+k5CW3Wg3QEennVx6B+gfksZ1ZdsC1mNLloH3qXRI1cAi0IQzQYWdgB+OfbTaxCmRsg0W/DMjn3WMas116dSC4jwpQqmElVAOwTO+mb7LcAgaIS3pStI90Yp2cDF8Bb2hTFJIZxmUwnfQdS26pvwF19MIzfFXRQcAAAAASUVORK5CYII=\\\">>,\\n  Favicon96 = <<\\\"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\\\">>,\\n  Favicon144 = <<\\\"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\\\">>,\\n  Favicon192 = <<\\\"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\\\">>,\\n  FaviconApple = <<\\\"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\\\">>,\\n\\n  Size = Fun_helpers_get(Req, [<<\\\"query\\\">>, <<\\\"size\\\">>], <<\\\"32\\\">>),\\n  DocData = if Doc /= null -> Fun_helpers_get(Doc, [<<\\\"data\\\">>], {[]}); true -> {[]} end,\\n\\n  Icon = case Size of\\n    <<\\\"32\\\">> -> IconList = binary_to_list(Fun_helpers_get(DocData, [<<\\\"favicon32\\\">>], <<\\\"\\\">>)), if length(IconList) == 0 -> Favicon32; true -> list_to_binary(IconList) end;\\n    <<\\\"96\\\">> -> IconList = binary_to_list(Fun_helpers_get(DocData, [<<\\\"favicon96\\\">>], <<\\\"\\\">>)), if length(IconList) == 0 -> Favicon96; true -> list_to_binary(IconList) end;\\n    <<\\\"144\\\">> -> IconList = binary_to_list(Fun_helpers_get(DocData, [<<\\\"favicon144\\\">>], <<\\\"\\\">>)), if length(IconList) == 0 -> Favicon144; true -> list_to_binary(IconList) end;\\n    <<\\\"192\\\">> -> IconList = binary_to_list(Fun_helpers_get(DocData, [<<\\\"favicon192\\\">>], <<\\\"\\\">>)), if length(IconList) == 0 -> Favicon192; true -> list_to_binary(IconList) end;\\n    <<\\\"apple\\\">> -> IconList = binary_to_list(Fun_helpers_get(DocData, [<<\\\"faviconApple\\\">>], <<\\\"\\\">>)), if length(IconList) == 0 -> FaviconApple; true -> list_to_binary(IconList) end;\\n    _ -> IconList = binary_to_list(Fun_helpers_get(DocData, [<<\\\"faviconApple\\\">>], <<\\\"\\\">>)), if length(IconList) == 0 -> FaviconApple; true -> list_to_binary(IconList) end\\n  end,\\n\\n  {[\\n    {<<\\\"base64\\\">>, Icon},\\n    {<<\\\"headers\\\">>, {[\\n      {<<\\\"Content-Type\\\">>, <<\\\"image/png\\\">>},\\n      {<<\\\"Cache-Control\\\">>, <<\\\"max-age=315360000\\\">>}\\n    ]}}\\n  ]}\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n\\nend.\">>},\n                                    {<<\"fontawesome\">>,\n                                     <<\"fun(Doc, Req) ->\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Helpers\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_helpers_set = fun(Data, Key, Append) ->\\n    if Append /= null -> couch_util:json_apply_field({Key, Append}, Data); true -> Data end\\n  end,\\n\\n  Fun_helpers_to_list = fun(Value) ->\\n    if is_binary(Value) -> binary_to_list(Value);\\n    is_integer(Value) -> integer_to_list(Value);\\n    is_float(Value) -> float_to_list(Value);\\n    is_tuple(Value) -> tuple_to_list(Value);\\n    is_boolean(Value) -> if Value == true -> \\\"true\\\"; true -> \\\"false\\\" end;\\n    is_atom(Value) -> atom_to_list(Value);\\n    true -> Value end\\n  end,\\n\\n  Fun_helpers_to_integer = fun(Value) ->\\n    if is_integer(Value) ->\\n      Value;\\n    true ->\\n      if is_binary(Value) ->\\n        if byte_size(Value) > 0 ->\\n          case re:run(binary_to_list(Value), \\\"[^0-9]\\\", [global]) of\\n            nomatch -> binary_to_integer(Value);\\n            _ -> 0\\n          end;\\n        true -> 0 end;\\n      true ->\\n        if is_list(Value) ->\\n          if length(Value) > 0 ->\\n            case re:run(Value, \\\"[^0-9]\\\", [global]) of\\n              nomatch -> list_to_integer(Value);\\n              _ -> 0\\n            end;\\n          true -> 0 end;\\n        true ->\\n          if is_float(Value) ->\\n            list_to_integer(float_to_list(Value, [{decimals, 0}]));\\n          true -> 0 end\\n        end\\n      end\\n    end\\n  end,\\n\\n  Fun_helpers_for_each = fun(Json, Fn) ->\\n    ForEachDeep = fun([Head | Body], Acc, D) ->\\n      Result = Fn(Head),\\n      Length = length(Body),\\n      if Length /= 0 ->\\n        D(Body, [Result | Acc], D);\\n        true -> lists:reverse([Result | Acc]) end\\n    end,\\n    JsonLength = length(Json),\\n    if JsonLength /= 0 ->\\n      ForEachDeep(Json, [], ForEachDeep);\\n      true -> null end\\n  end,\\n\\n  Fun_helpers_to_string = fun(Value) ->\\n    lists:flatten(io_lib:format(\\\"~p\\\", [Value]))\\n  end,\\n\\n  Fun_helpers_get = fun(Data, Keys, Default) ->\\n    if length(Keys) > 1 ->\\n      GetWalker = fun(Data, [Key | Keys], D) ->\\n        if (is_integer(Key)) ->\\n          if (is_list(Data)) and (Key =< length(Data)) ->\\n            Value = lists:nth(Key, Data),\\n            case length(Keys) == 0 of\\n              true -> case Value of null -> Default; _ -> Value end;\\n              _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n            end;\\n            true -> Default end;\\n          true ->\\n            {DataList} = Data,\\n            case couch_util:get_value(Key, DataList, null) of\\n              null -> Default;\\n              Value -> case length(Keys) == 0 of\\n                true -> case Value of null -> Default; _ -> Value end;\\n                _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n              end\\n            end\\n        end\\n      end,\\n      GetWalker(Data, Keys, GetWalker);\\n    true ->\\n      {Unwrap} = Data,\\n      [Key | _] = Keys,\\n      couch_util:get_value(Key, Unwrap, Default)\\n    end\\n  end,\\n\\n  Fun_helpers_error = fun(Message) ->\\n    throw({[{<<\\\"forbidden\\\">>, Fun_helpers_to_string(Message)}]})\\n  end,\\n\\n \\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Main\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n\\n    Base = [\\n    <<\\\"@font-face{font-family:\\\\\\\"Font Awesome 6 Pro\\\\\\\";font-style:normal;font-weight:900;font-display:swap;src:url(https://assets.isite.app/fa-6/fa-solid-900.woff2) format(\\\\\\\"woff2\\\\\\\")}\\\">>,\\n    <<\\\"@font-face{font-family:\\\\\\\"Font Awesome 6 Pro\\\\\\\";font-style:normal;font-weight:400;font-display:swap;src:url(https://assets.isite.app/fa-6/fa-regular-400.woff2) format(\\\\\\\"woff2\\\\\\\")}\\\">>,\\n    <<\\\"@font-face{font-family:\\\\\\\"Font Awesome 6 Pro\\\\\\\";font-style:normal;font-weight:300;font-display:swap;src:url(https://assets.isite.app/fa-6/fa-light-300.woff2) format(\\\\\\\"woff2\\\\\\\")}\\\">>,\\n    <<\\\"@font-face{font-family:\\\\\\\"Font Awesome 6 Pro\\\\\\\";font-style:normal;font-weight:100;font-display:swap;src:url(https://assets.isite.app/fa-6/fa-thin-100.woff2) format(\\\\\\\"woff2\\\\\\\")}\\\">>,\\n    <<\\\"@font-face{font-family:\\\\\\\"Font Awesome 6 Brands\\\\\\\";font-style:normal;font-weight:400;font-display:swap;src:url(https://assets.isite.app/fa-6/fa-brands-400.woff2) format(\\\\\\\"woff2\\\\\\\")}\\\">>,\\n    <<\\\"@font-face{font-family:\\\\\\\"Font Awesome 6 Duotone\\\\\\\";font-style:normal;font-weight:900;font-display:swap;src:url(https://assets.isite.app/fa-6/fa-duotone-900.woff2) format(\\\\\\\"woff2\\\\\\\")}\\\">>,\\n    <<\\\".fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}\\\">>,\\n    <<\\\".far{font-weight:400}\\\">>,\\n    <<\\\".fa,.far,.fas{font-family:\\\\\\\"Font Awesome 6 Pro\\\\\\\"}\\\">>,\\n    <<\\\".fa,.fas{font-weight:900}\\\">>,\\n    <<\\\".fab{font-family:\\\\\\\"Font Awesome 6 Brands\\\\\\\";font-weight:400}\\\">>,\\n    <<\\\".fal{font-family:\\\\\\\"Font Awesome 6 Pro\\\\\\\";font-weight:300}\\\">>,\\n    <<\\\".fat{font-family:\\\\\\\"Font Awesome 6 Pro\\\\\\\";font-weight:100}\\\">>,\\n    <<\\\".fad{position:relative;font-family:\\\\\\\"Font Awesome 6 Duotone\\\\\\\";font-weight:900}\\\">>,\\n    <<\\\".fad:before{position:absolute;opacity:1}\\\">>,\\n    <<\\\".fa-swap-opacity .fad:before,.fad.fa-swap-opacity:before,.fad:after{opacity:.4}\\\">>,\\n    <<\\\".fa-swap-opacity .fad:after,.fad.fa-swap-opacity:after{opacity:1}\\\">>,\\n    <<\\\".fad.fa-inverse{color:#fff}\\\">>,\\n    <<\\\".fad.fa-fw:before,.fad.fa-stack-1x:before,.fad.fa-stack-2x:before{left:50%;transform:translateX(-50%)}\\\">>\\n  ],\\n\\n  Param = Fun_helpers_get(Req, [<<\\\"query\\\">>, <<\\\"list\\\">>], null),\\n\\n  Walker = fun([Rule | Body], Acc, List, W) ->\\n    {Key, Value} = Rule,\\n    Check = lists:any(fun(X) -> X == Key end, List),\\n    AppendAcc = if Check == true -> [Value]; true -> [] end,\\n    if length(Body) > 0 -> W(Body, lists:append(Acc, AppendAcc), List, W); true -> lists:append(Acc, AppendAcc) end\\n  end,\\n\\n  Styles = if Param /= null ->\\n    ParamList = binary_to_list(Param),\\n    if length(ParamList) < 2048 ->\\n      if Doc /= null ->\\n        Data = Fun_helpers_get(Doc, [<<\\\"data\\\">>], null),\\n        if Data /= null ->\\n          List = lists:map(fun(Item) -> list_to_binary(Item) end, lists:filter(fun(Item) -> if length(Item) > 0 -> true; true -> false end end, lists:map(fun(Item) -> string:trim(Item) end, string:split(ParamList, \\\",\\\", all)))),\\n          if length(List) > 0 ->\\n            {Unwrap} = Data,\\n            Walker(Unwrap, [], List, Walker);\\n          true -> [] end;\\n        true -> [] end;\\n      true -> [] end;\\n    true -> [] end;\\n  true -> [] end,\\n\\n  {[\\n    {<<\\\"body\\\">>, list_to_binary(lists:append(Base, Styles))},\\n    {<<\\\"headers\\\">>, {[\\n      {<<\\\"Content-Type\\\">>, <<\\\"text/css\\\">>},\\n      {<<\\\"Cache-Control\\\">>, <<\\\"max-age=315360000\\\">>}\\n    ]}}\\n  ]}\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n\\nend.\">>},\n                                    {<<\"fonts\">>,\n                                     <<\"fun(Doc, Req) ->\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Helpers\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_helpers_set = fun(Data, Key, Append) ->\\n    if Append /= null -> couch_util:json_apply_field({Key, Append}, Data); true -> Data end\\n  end,\\n\\n  Fun_helpers_to_list = fun(Value) ->\\n    if is_binary(Value) -> binary_to_list(Value);\\n    is_integer(Value) -> integer_to_list(Value);\\n    is_float(Value) -> float_to_list(Value);\\n    is_tuple(Value) -> tuple_to_list(Value);\\n    is_boolean(Value) -> if Value == true -> \\\"true\\\"; true -> \\\"false\\\" end;\\n    is_atom(Value) -> atom_to_list(Value);\\n    true -> Value end\\n  end,\\n\\n  Fun_helpers_to_integer = fun(Value) ->\\n    if is_integer(Value) ->\\n      Value;\\n    true ->\\n      if is_binary(Value) ->\\n        if byte_size(Value) > 0 ->\\n          case re:run(binary_to_list(Value), \\\"[^0-9]\\\", [global]) of\\n            nomatch -> binary_to_integer(Value);\\n            _ -> 0\\n          end;\\n        true -> 0 end;\\n      true ->\\n        if is_list(Value) ->\\n          if length(Value) > 0 ->\\n            case re:run(Value, \\\"[^0-9]\\\", [global]) of\\n              nomatch -> list_to_integer(Value);\\n              _ -> 0\\n            end;\\n          true -> 0 end;\\n        true ->\\n          if is_float(Value) ->\\n            list_to_integer(float_to_list(Value, [{decimals, 0}]));\\n          true -> 0 end\\n        end\\n      end\\n    end\\n  end,\\n\\n  Fun_helpers_for_each = fun(Json, Fn) ->\\n    ForEachDeep = fun([Head | Body], Acc, D) ->\\n      Result = Fn(Head),\\n      Length = length(Body),\\n      if Length /= 0 ->\\n        D(Body, [Result | Acc], D);\\n        true -> lists:reverse([Result | Acc]) end\\n    end,\\n    JsonLength = length(Json),\\n    if JsonLength /= 0 ->\\n      ForEachDeep(Json, [], ForEachDeep);\\n      true -> null end\\n  end,\\n\\n  Fun_helpers_to_string = fun(Value) ->\\n    lists:flatten(io_lib:format(\\\"~p\\\", [Value]))\\n  end,\\n\\n  Fun_helpers_get = fun(Data, Keys, Default) ->\\n    if length(Keys) > 1 ->\\n      GetWalker = fun(Data, [Key | Keys], D) ->\\n        if (is_integer(Key)) ->\\n          if (is_list(Data)) and (Key =< length(Data)) ->\\n            Value = lists:nth(Key, Data),\\n            case length(Keys) == 0 of\\n              true -> case Value of null -> Default; _ -> Value end;\\n              _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n            end;\\n            true -> Default end;\\n          true ->\\n            {DataList} = Data,\\n            case couch_util:get_value(Key, DataList, null) of\\n              null -> Default;\\n              Value -> case length(Keys) == 0 of\\n                true -> case Value of null -> Default; _ -> Value end;\\n                _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n              end\\n            end\\n        end\\n      end,\\n      GetWalker(Data, Keys, GetWalker);\\n    true ->\\n      {Unwrap} = Data,\\n      [Key | _] = Keys,\\n      couch_util:get_value(Key, Unwrap, Default)\\n    end\\n  end,\\n\\n  Fun_helpers_error = fun(Message) ->\\n    throw({[{<<\\\"forbidden\\\">>, Fun_helpers_to_string(Message)}]})\\n  end,\\n\\n \\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Main\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n\\n    Param = Fun_helpers_get(Req, [<<\\\"query\\\">>, <<\\\"list\\\">>], null),\\n\\n  Walker = fun([Rule | Body], Acc, List, W) ->\\n    {Key, Value} = Rule,\\n    Check = lists:any(fun(X) -> X == Key end, List),\\n    AppendAcc = if Check == true -> [Value]; true -> [] end,\\n    if length(Body) > 0 -> W(Body, lists:append(Acc, AppendAcc), List, W); true -> lists:append(Acc, AppendAcc) end\\n  end,\\n\\n  Styles = if Param /= null ->\\n    ParamList = binary_to_list(Param),\\n    if length(ParamList) < 2048 ->\\n      if Doc /= null ->\\n        Data = Fun_helpers_get(Doc, [<<\\\"data\\\">>], null),\\n        if Data /= null ->\\n          List = lists:map(fun(Item) -> list_to_binary(Item) end, lists:filter(fun(Item) -> if length(Item) > 0 -> true; true -> false end end, lists:map(fun(Item) -> string:trim(Item) end, string:split(ParamList, \\\",\\\", all)))),\\n          if length(List) > 0 ->\\n            {Unwrap} = Data,\\n            Walker(Unwrap, [], List, Walker);\\n          true -> [] end;\\n        true -> [] end;\\n      true -> [] end;\\n    true -> [] end;\\n  true -> [] end,\\n\\n  {[\\n    {<<\\\"body\\\">>, list_to_binary(Styles)},\\n    {<<\\\"headers\\\">>, {[\\n      {<<\\\"Content-Type\\\">>, <<\\\"text/css\\\">>},\\n      {<<\\\"Cache-Control\\\">>, <<\\\"max-age=315360000\\\">>}\\n    ]}}\\n  ]}\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n\\nend.\">>},\n                                    {<<\"iframe\">>,\n                                     <<\"fun(Doc, Req) ->\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Defines\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  DEBUG = false,\\n  SERVER = <<\\\"https://database.isite.app\\\">>,\\n  CONTAINER = <<\\\"database\\\">>,\\n  DATABASE = <<\\\"isite\\\">>,\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Helpers\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_helpers_set = fun(Data, Key, Append) ->\\n    if Append /= null -> couch_util:json_apply_field({Key, Append}, Data); true -> Data end\\n  end,\\n\\n  Fun_helpers_to_list = fun(Value) ->\\n    if is_binary(Value) -> binary_to_list(Value);\\n    is_integer(Value) -> integer_to_list(Value);\\n    is_float(Value) -> float_to_list(Value);\\n    is_tuple(Value) -> tuple_to_list(Value);\\n    is_boolean(Value) -> if Value == true -> \\\"true\\\"; true -> \\\"false\\\" end;\\n    is_atom(Value) -> atom_to_list(Value);\\n    true -> Value end\\n  end,\\n\\n  Fun_helpers_to_integer = fun(Value) ->\\n    if is_integer(Value) ->\\n      Value;\\n    true ->\\n      if is_binary(Value) ->\\n        if byte_size(Value) > 0 ->\\n          case re:run(binary_to_list(Value), \\\"[^0-9]\\\", [global]) of\\n            nomatch -> binary_to_integer(Value);\\n            _ -> 0\\n          end;\\n        true -> 0 end;\\n      true ->\\n        if is_list(Value) ->\\n          if length(Value) > 0 ->\\n            case re:run(Value, \\\"[^0-9]\\\", [global]) of\\n              nomatch -> list_to_integer(Value);\\n              _ -> 0\\n            end;\\n          true -> 0 end;\\n        true ->\\n          if is_float(Value) ->\\n            list_to_integer(float_to_list(Value, [{decimals, 0}]));\\n          true -> 0 end\\n        end\\n      end\\n    end\\n  end,\\n\\n  Fun_helpers_for_each = fun(Json, Fn) ->\\n    ForEachDeep = fun([Head | Body], Acc, D) ->\\n      Result = Fn(Head),\\n      Length = length(Body),\\n      if Length /= 0 ->\\n        D(Body, [Result | Acc], D);\\n        true -> lists:reverse([Result | Acc]) end\\n    end,\\n    JsonLength = length(Json),\\n    if JsonLength /= 0 ->\\n      ForEachDeep(Json, [], ForEachDeep);\\n      true -> null end\\n  end,\\n\\n  Fun_helpers_to_string = fun(Value) ->\\n    lists:flatten(io_lib:format(\\\"~p\\\", [Value]))\\n  end,\\n\\n  Fun_helpers_get = fun(Data, Keys, Default) ->\\n    if length(Keys) > 1 ->\\n      GetWalker = fun(Data, [Key | Keys], D) ->\\n        if (is_integer(Key)) ->\\n          if (is_list(Data)) and (Key =< length(Data)) ->\\n            Value = lists:nth(Key, Data),\\n            case length(Keys) == 0 of\\n              true -> case Value of null -> Default; _ -> Value end;\\n              _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n            end;\\n            true -> Default end;\\n          true ->\\n            {DataList} = Data,\\n            case couch_util:get_value(Key, DataList, null) of\\n              null -> Default;\\n              Value -> case length(Keys) == 0 of\\n                true -> case Value of null -> Default; _ -> Value end;\\n                _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n              end\\n            end\\n        end\\n      end,\\n      GetWalker(Data, Keys, GetWalker);\\n    true ->\\n      {Unwrap} = Data,\\n      [Key | _] = Keys,\\n      couch_util:get_value(Key, Unwrap, Default)\\n    end\\n  end,\\n\\n  Fun_helpers_error = fun(Message) ->\\n    throw({[{<<\\\"forbidden\\\">>, Fun_helpers_to_string(Message)}]})\\n  end,\\n\\n  Fun_helpers_html_message = fun(Text) ->\\n    %% language=html\\n    list_to_binary([\\\"<!doctype html>\\n    <html lang=\\\\\\\"en\\\\\\\">\\n      <head>\\n        <meta charset=\\\\\\\"utf-8\\\\\\\">\\n        <title>iSite</title>\\n        <base href=\\\\\\\"/\\\\\\\">\\n        <meta name=\\\\\\\"apple-mobile-web-app-capable\\\\\\\" content=\\\\\\\"yes\\\\\\\">\\n        <meta name=\\\\\\\"apple-mobile-web-app-status-bar-style\\\\\\\" content=\\\\\\\"black\\\\\\\">\\n        <meta name=\\\\\\\"viewport\\\\\\\" content=\\\\\\\"width=device-width, initial-scale=1\\\\\\\">\\n        <link rel=\\\\\\\"icon\\\\\\\" type=\\\\\\\"image/png\\\\\\\" href=\\\\\\\"favicon.png\\\\\\\">\\n        <style>html{box-sizing:border-box;font-size:16px;height:100%}*,:before,:after{box-sizing:inherit}body{background-color:#000000;height:100%;margin:0;padding:0;font-weight:400}.app-loading{height:100%;display:table;width:100%}.app-loading .app-loading-text{display:table-cell;height:100%;vertical-align:middle;text-align:center;font-weight:100;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-size:14px;line-height:1.3;color:#fff;width:100%}</style>\\n        <script src=\\\\\\\"https://assets.isite.app/iframe-resizer/iframeResizer.contentWindow.min.js\\\\\\\"></script>\\n      </head>\\n      <body>\\n        <div class=\\\\\\\"app-loading\\\\\\\">\\n          <div class=\\\\\\\"app-loading-text\\\\\\\">\\\", binary_to_list(Text), \\\"</div>\\n        </div>\\n      </body>\\n    </html>\\\"])\\n  end,\\n\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Multisite\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_multisite_id_cut = fun(Id, Multisite) ->\\n    if Id /= null ->\\n      Type = re:replace(binary_to_list(Id), \\\"^([^\\\\/]*)\\\\/.*\\\", \\\"\\\\\\\\1\\\", [global, {return, list}]),\\n      Walker = fun([Key | Body], W) ->\\n        Match = re:run(binary_to_list(Id), couch_util:implode([Type, \\\"/\\\", binary_to_list(Key)], \\\"\\\"), [global]),\\n        Test = case Match of {match, _} -> true; _ -> false end,\\n        if Test == true ->\\n          Strip = re:replace(binary_to_list(Id), couch_util:implode([\\\"^\\\", Type, \\\"|\\\", binary_to_list(Key), \\\"\\\\/\\\"], \\\"\\\"), \\\"\\\", [global, {return, list}]),\\n          list_to_binary(couch_util:implode([Type, Strip], \\\"\\\"));\\n        true ->\\n          if length(Body) > 0 -> W(Body, W); true -> Id end\\n        end\\n      end,\\n  \\n      if length(Type) > 0 ->\\n        Keys = Fun_helpers_get(Multisite, [<<\\\"keys\\\">>], []),\\n        if length(Keys) > 0 -> Walker(Keys, Walker); true -> Id end;\\n      true -> Id end;\\n    true -> null end\\n  end,\\n\\n  Fun_multisite_id_add = fun(Id, Multisite, Site) ->\\n    if Id /= null ->\\n      Type = re:replace(binary_to_list(Id), \\\"^([^\\\\/]*)\\\\/.*\\\", \\\"\\\\\\\\1\\\", [global, {return, list}]),\\n      Walker = fun([Pattern | Body], Clear, Key, W) ->\\n        Match = re:run(Clear, binary_to_list(Pattern), [global]),\\n        Test = case Match of {match, _} -> true; _ -> false end,\\n        if Test == true ->\\n          if Key /= <<\\\"main\\\">> ->\\n            Strip = re:replace(Clear, couch_util:implode([\\\"^\\\", Type, \\\"\\\\/\\\"], \\\"\\\"), \\\"\\\", [{return, list}]),\\n            list_to_binary(couch_util:implode([Type, \\\"/\\\", binary_to_list(Key), \\\"/\\\", Strip], \\\"\\\"));\\n          true -> list_to_binary(Clear) end;\\n        true ->\\n          if length(Body) > 0 -> W(Body, Clear, Key, W); true -> Clear end\\n        end\\n      end,\\n  \\n      if length(Type) > 0 ->\\n        Cut = Fun_multisite_id_cut(Id, Multisite),\\n        Key = Fun_helpers_get(Site, [<<\\\"key\\\">>], <<\\\"main\\\">>),\\n        List = Fun_helpers_get(Site, [<<\\\"docs\\\">>], []),\\n        if length(List) > 0 -> Walker(List, binary_to_list(Cut), Key, Walker); true -> Cut end;\\n      true -> Id end;\\n    true -> null end\\n  end,\\n\\n  Fun_multisite_get_setting = fun(List, Id, Multisite, Site) ->\\n    if length(List) > 0 ->\\n      MultisiteKey = Fun_multisite_id_add(Id, Multisite, Site),\\n      MainKey = Fun_multisite_id_cut(Id, Multisite),\\n      MultisiteSetting = lists:filter(fun(Item) -> ItemKey = Fun_helpers_get(Item, [<<\\\"_id\\\">>], null), if ItemKey /= null -> if ItemKey == MultisiteKey -> true; true -> false end; true -> false end end, List),\\n      MainSetting = lists:filter(fun(Item) -> ItemKey = Fun_helpers_get(Item, [<<\\\"_id\\\">>], null), if ItemKey /= null -> if ItemKey == MainKey -> true; true -> false end; true -> false end end, List),\\n      if length(MultisiteSetting) > 0 -> [F | _] = MultisiteSetting, F; true -> if length(MainSetting) > 0 -> [F | _] = MainSetting, F; true -> null end end;\\n    true -> null end\\n  end,\\n\\n  Fun_multisite_get_all = fun(List) ->\\n    Keys = sets:to_list(sets:from_list(lists:map(fun(Item) -> Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"key\\\">>], <<\\\"main\\\">>) end, List))),\\n    Languages = sets:to_list(sets:from_list(lists:map(fun(Item) -> Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"language\\\">>], <<\\\"en\\\">>) end, List))),\\n    All = lists:map(fun(Item) -> {[{<<\\\"key\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"key\\\">>], <<\\\"main\\\">>)}, {<<\\\"domain\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"domain\\\">>], <<\\\"localhost\\\">>)}, {<<\\\"prefix\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"prefix\\\">>], <<\\\"\\\">>)}, {<<\\\"language\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"language\\\">>], <<\\\"en\\\">>)}, {<<\\\"aliases\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"aliases\\\">>], [])}, {<<\\\"docs\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"docs\\\">>], [])}]} end, List),\\n    {[{<<\\\"keys\\\">>, Keys}, {<<\\\"languages\\\">>, Languages}, {<<\\\"users\\\">>, []}, {<<\\\"sites\\\">>, All}]}\\n  end,\\n\\n  Fun_multisite_get_site = fun(Domain, Prefix, Multisite) ->\\n    MultisiteSites = Fun_helpers_get(Multisite, [<<\\\"sites\\\">>], []),\\n    MultisiteDomain = lists:filter(fun(Item) -> D = Fun_helpers_get(Item, [<<\\\"domain\\\">>], null), if D == Domain -> true; true -> false end end, MultisiteSites),\\n  \\n    GetMainSite = fun(SL) ->\\n      TL = lists:filter(fun(I) -> K = Fun_helpers_get(I, [<<\\\"key\\\">>], null), if K == <<\\\"main\\\">> -> true; true -> false end end, SL),\\n      if length(TL) > 0 -> [TF | _] = TL, TF; true ->\\n        {[{<<\\\"key\\\">>, <<\\\"main\\\">>}, {<<\\\"domain\\\">>, <<\\\"localhost\\\">>}, {<<\\\"prefix\\\">>, <<\\\"\\\">>}, {<<\\\"language\\\">>, <<\\\"ru\\\">>}, {<<\\\"aliases\\\">>, []}, {<<\\\"docs\\\">>, []}]}\\n      end\\n    end,\\n  \\n    if length(MultisiteDomain) > 0 ->\\n      if length(MultisiteDomain) == 1 -> [MF1 | _] = MultisiteDomain, MF1; true ->\\n        MultisitePrefix = lists:filter(fun(Item) -> P = Fun_helpers_get(Item, [<<\\\"prefix\\\">>], <<\\\"\\\">>), if P == Prefix -> true; true -> false end end, MultisiteDomain),\\n        if length(MultisitePrefix) > 0 -> [MF2 | _] = MultisitePrefix, MF2; true -> GetMainSite(MultisiteSites) end\\n      end;\\n    true ->\\n      GetMainSite(MultisiteSites)\\n    end\\n  end,\\n\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Couchdb\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_couchdb_get_doc = fun(Id) ->\\n    DesignUrl = if DEBUG == true -> couch_util:implode([binary_to_list(SERVER), \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", http_uri:encode(binary_to_list(Id))], \\\"\\\"); true -> couch_util:implode([\\\"http://\\\", binary_to_list(CONTAINER), \\\":5984\\\", \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", http_uri:encode(binary_to_list(Id))], \\\"\\\") end,\\n    case ibrowse:send_req(DesignUrl, [], get, [], [{connect_timeout, 60000}], 60000) of {ok, _, _, Body} -> couch_util:json_decode(Body); _ -> {[{}]} end\\n  end,\\n\\n  Fun_couchdb_put_doc = fun(DocObject) ->\\n    Id = Fun_helpers_get(DocObject, [<<\\\"_id\\\">>], null),\\n    Url = if DEBUG == true -> couch_util:implode([binary_to_list(SERVER), \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", http_uri:encode(binary_to_list(Id))], \\\"\\\"); true -> couch_util:implode([\\\"http://\\\", binary_to_list(CONTAINER), \\\":5984\\\", \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", http_uri:encode(binary_to_list(Id))], \\\"\\\") end,\\n    EncodeJson = couch_util:json_encode(DocObject),\\n  \\n    case ibrowse:send_req(Url, [{\\\"Content-Type\\\", \\\"application/json\\\"}], put, EncodeJson, [{connect_timeout, 60000}], 60000) of\\n      {ok, _, _, Body} -> try couch_util:json_decode(Body) catch _:_ -> {[]} end;\\n      Error -> Error\\n    end\\n  end,\\n\\n  Fun_couchdb_get_view = fun(View, Params) ->\\n    case string:split(View, \\\"/\\\", all) of\\n      [DesignName, DesignView] ->\\n        QueryString = case Params of\\n          {Unwrap} ->\\n            if length(Unwrap) > 0 -> couch_util:implode(lists:filter(fun(Item) ->\\n              if Item /= null -> true; true -> false end\\n            end, lists:map(fun(Item) ->\\n              case Item of\\n                {Key, Value} -> list_to_binary([binary_to_list(Key), \\\"=\\\", binary_to_list(Value)]);\\n                _ -> null\\n              end\\n            end, Unwrap)), \\\"&\\\");\\n              true -> \\\"\\\"\\n            end;\\n          _ -> \\\"\\\"\\n        end,\\n        DesignUrl = if DEBUG == true ->\\n          couch_util:implode([binary_to_list(SERVER), \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", \\\"_design\\\", \\\"/\\\", binary_to_list(DesignName), \\\"/\\\", \\\"_view\\\", \\\"/\\\", binary_to_list(DesignView), \\\"?\\\", QueryString], \\\"\\\");\\n        true ->\\n          couch_util:implode([\\\"http://\\\", binary_to_list(CONTAINER), \\\":5984\\\", \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", \\\"_design\\\", \\\"/\\\", binary_to_list(DesignName), \\\"/\\\", \\\"_view\\\", \\\"/\\\", binary_to_list(DesignView), \\\"?\\\", QueryString], \\\"\\\")\\n        end,\\n        case ibrowse:send_req(DesignUrl, [], get, [], [{connect_timeout, 60000}], 60000) of\\n          {ok, _, _, Body} -> couch_util:json_decode(Body);\\n          _ -> {[{}]}\\n        end;\\n      _ -> {[]}\\n    end\\n  end,\\n\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Functions\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n \\n  Fun_get_frame = fun(Body) ->\\n    %% language=html\\n    list_to_binary(couch_util:implode([\\n      \\\"<!DOCTYPE html>\\\",\\n      \\\"<html lang=\\\\\\\"en\\\\\\\">\\\",\\n      \\\"  <head>\\\",\\n      \\\"    <meta charset=\\\\\\\"utf-8\\\\\\\">\\\",\\n      \\\"    <title>Iframe</title>\\\",\\n      \\\"    <style>html{box-sizing:border-box;font-size:16px;overflow:hidden}body{overflow:hidden}*,:before,:after{box-sizing:inherit}body,h1,h2,h3,h4,h5,h6,p,ol,ul{margin:0;padding:0;font-weight:400}ol,ul{list-style:none}img{max-width:100%;height:auto}</style>\\\",\\n      \\\"    <script src=\\\\\\\"https://assets.isite.app/iframe-resizer/iframeResizer.contentWindow.min.js\\\\\\\"></script>\\\",\\n      \\\"  </head>\\\",\\n      \\\"  <body>\\\", binary_to_list(Body), \\\"</body>\\\",\\n      \\\"</html>\\\"\\n    ], \\\"\\\"))\\n  end,\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Main\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n\\n    Host = Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"X-Forwarded-Host\\\">>], Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"x-forwarded-host\\\">>], Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"Host\\\">>], Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"host\\\">>], null)))),\\n  Domain = if Host /= null -> re:replace(binary_to_list(Host), \\\"^(.*)\\\\:[0-9]*$\\\", \\\"\\\\\\\\1\\\", [{return, binary}]); true -> <<\\\"localhost\\\">> end,\\n  Prefix = Fun_helpers_get(Req, [<<\\\"query\\\">>, <<\\\"prefix\\\">>], <<\\\"\\\">>),\\n\\n  Request = Fun_couchdb_get_view(<<\\\"system/setting\\\">>, {[{<<\\\"include_docs\\\">>, <<\\\"true\\\">>}, {<<\\\"limit\\\">>, <<\\\"1000\\\">>}]}),\\n  Docs = Fun_helpers_get(Request, [<<\\\"rows\\\">>], []),\\n\\n  Sites = lists:filter(fun(Item) -> case Fun_helpers_get(Item, [<<\\\"type\\\">>], null) of <<\\\"site\\\">> -> true; _ -> false end end, lists:filter(fun(Item) -> if Item /= null -> true; true -> false end end, lists:map(fun(Item) -> Fun_helpers_get(Item, [<<\\\"doc\\\">>], null) end, Docs))),\\n  Multisite = Fun_multisite_get_all(Sites),\\n  Site = Fun_multisite_get_site(Domain, Prefix, Multisite),\\n  Settings = lists:filter(fun(Item) -> case Fun_multisite_id_cut(Fun_helpers_get(Item, [<<\\\"_id\\\">>], null), Multisite) of <<\\\"setting/codes\\\">> -> true; _ -> false end end, lists:filter(fun(Item) -> if Item /= null -> true; true -> false end end, lists:map(fun(Item) -> Fun_helpers_get(Item, [<<\\\"doc\\\">>], null) end, Docs))),\\n  SettingDoc = Fun_multisite_get_setting(Settings, <<\\\"setting/codes\\\">>, Multisite, Site),\\n\\n  Hash = if SettingDoc /= null -> Fun_helpers_get(SettingDoc, [<<\\\"_rev\\\">>], <<\\\"none\\\">>); true -> <<\\\"none\\\">> end,\\n  IfMatchHash = list_to_binary(couch_util:implode([\\\"\\\\\\\"\\\", binary_to_list(Hash), \\\"\\\\\\\"\\\"], \\\"\\\")),\\n  IfMatch = Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"If-None-Match\\\">>], Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"if-none-match\\\">>], <<\\\"\\\">>)),\\n\\n  if IfMatch == IfMatchHash ->\\n    {[\\n      {<<\\\"code\\\">>, 304},\\n      {<<\\\"body\\\">>, <<\\\"\\\">>},\\n      {<<\\\"headers\\\">>, {[\\n        {<<\\\"Content-Type\\\">>, <<\\\"text/html\\\">>}\\n      ]}}\\n    ]};\\n  true ->\\n    HTMLCode = if length(Settings) > 0 ->\\n      CodeNumber = Fun_helpers_get(Req, [<<\\\"query\\\">>, <<\\\"code\\\">>], null),\\n      CodeId = Fun_helpers_get(Req, [<<\\\"query\\\">>, <<\\\"id\\\">>], null),\\n\\n      if (CodeNumber /= null) or (CodeId /= null) ->\\n        if SettingDoc /= null ->\\n          Codes = Fun_helpers_get(SettingDoc, [<<\\\"data\\\">>, <<\\\"codes\\\">>], null),\\n          if Codes /= null ->\\n            if CodeId /= null ->\\n              CodeFilter = lists:filter(fun(Item) -> ItemId = Fun_helpers_get(Item, [<<\\\"id\\\">>], null), if ItemId == CodeId -> true; true -> false end end, Codes),\\n              if length(CodeFilter) > 0 ->\\n                FoundItem = lists:nth(1, CodeFilter),\\n                FoundCode = Fun_helpers_get(FoundItem, [<<\\\"code\\\">>], null),\\n                if FoundCode /= null -> Fun_get_frame(FoundCode); true -> Fun_helpers_html_message(<<\\\"iFrame not found\\\">>) end;\\n              true -> Fun_helpers_html_message(<<\\\"iFrame not found\\\">>) end;\\n            true ->\\n              CodeNumberInteger = binary_to_integer(re:replace(binary_to_list(CodeNumber), \\\"[^0-9]\\\", \\\"\\\", [global, {return, binary}])),\\n              if CodeNumberInteger =< length(Codes) ->\\n                FoundItem = try lists:nth(CodeNumberInteger, Codes) of NC -> NC catch _:_ -> {[]} end,\\n                FoundCode = Fun_helpers_get(FoundItem, [<<\\\"code\\\">>], null),\\n                if FoundCode /= null -> Fun_get_frame(FoundCode); true -> Fun_helpers_html_message(<<\\\"iFrame not found\\\">>) end;\\n              true -> Fun_helpers_html_message(<<\\\"iFrame not found\\\">>) end\\n            end;\\n          true -> Fun_helpers_html_message(<<\\\"iFrame not found\\\">>) end;\\n        true -> Fun_helpers_html_message(<<\\\"iFrame not found\\\">>) end;\\n      true -> Fun_helpers_html_message(<<\\\"iFrame not found\\\">>) end;\\n    true -> Fun_helpers_html_message(<<\\\"iFrame not found\\\">>) end,\\n\\n    {[\\n      {<<\\\"code\\\">>, 200},\\n      {<<\\\"body\\\">>, HTMLCode},\\n      {<<\\\"headers\\\">>, {[\\n        {<<\\\"Content-Type\\\">>, <<\\\"text/html\\\">>},\\n        {<<\\\"ETag\\\">>, Hash}\\n      ]}}\\n    ]}\\n  end\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n\\nend.\">>},\n                                    {<<\"manifest\">>,\n                                     <<\"fun(Doc, Req) ->\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Defines\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  DEBUG = false,\\n  SERVER = <<\\\"https://database.isite.app\\\">>,\\n  CONTAINER = <<\\\"database\\\">>,\\n  DATABASE = <<\\\"isite\\\">>,\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Helpers\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_helpers_set = fun(Data, Key, Append) ->\\n    if Append /= null -> couch_util:json_apply_field({Key, Append}, Data); true -> Data end\\n  end,\\n\\n  Fun_helpers_to_list = fun(Value) ->\\n    if is_binary(Value) -> binary_to_list(Value);\\n    is_integer(Value) -> integer_to_list(Value);\\n    is_float(Value) -> float_to_list(Value);\\n    is_tuple(Value) -> tuple_to_list(Value);\\n    is_boolean(Value) -> if Value == true -> \\\"true\\\"; true -> \\\"false\\\" end;\\n    is_atom(Value) -> atom_to_list(Value);\\n    true -> Value end\\n  end,\\n\\n  Fun_helpers_to_integer = fun(Value) ->\\n    if is_integer(Value) ->\\n      Value;\\n    true ->\\n      if is_binary(Value) ->\\n        if byte_size(Value) > 0 ->\\n          case re:run(binary_to_list(Value), \\\"[^0-9]\\\", [global]) of\\n            nomatch -> binary_to_integer(Value);\\n            _ -> 0\\n          end;\\n        true -> 0 end;\\n      true ->\\n        if is_list(Value) ->\\n          if length(Value) > 0 ->\\n            case re:run(Value, \\\"[^0-9]\\\", [global]) of\\n              nomatch -> list_to_integer(Value);\\n              _ -> 0\\n            end;\\n          true -> 0 end;\\n        true ->\\n          if is_float(Value) ->\\n            list_to_integer(float_to_list(Value, [{decimals, 0}]));\\n          true -> 0 end\\n        end\\n      end\\n    end\\n  end,\\n\\n  Fun_helpers_for_each = fun(Json, Fn) ->\\n    ForEachDeep = fun([Head | Body], Acc, D) ->\\n      Result = Fn(Head),\\n      Length = length(Body),\\n      if Length /= 0 ->\\n        D(Body, [Result | Acc], D);\\n        true -> lists:reverse([Result | Acc]) end\\n    end,\\n    JsonLength = length(Json),\\n    if JsonLength /= 0 ->\\n      ForEachDeep(Json, [], ForEachDeep);\\n      true -> null end\\n  end,\\n\\n  Fun_helpers_to_string = fun(Value) ->\\n    lists:flatten(io_lib:format(\\\"~p\\\", [Value]))\\n  end,\\n\\n  Fun_helpers_get = fun(Data, Keys, Default) ->\\n    if length(Keys) > 1 ->\\n      GetWalker = fun(Data, [Key | Keys], D) ->\\n        if (is_integer(Key)) ->\\n          if (is_list(Data)) and (Key =< length(Data)) ->\\n            Value = lists:nth(Key, Data),\\n            case length(Keys) == 0 of\\n              true -> case Value of null -> Default; _ -> Value end;\\n              _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n            end;\\n            true -> Default end;\\n          true ->\\n            {DataList} = Data,\\n            case couch_util:get_value(Key, DataList, null) of\\n              null -> Default;\\n              Value -> case length(Keys) == 0 of\\n                true -> case Value of null -> Default; _ -> Value end;\\n                _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n              end\\n            end\\n        end\\n      end,\\n      GetWalker(Data, Keys, GetWalker);\\n    true ->\\n      {Unwrap} = Data,\\n      [Key | _] = Keys,\\n      couch_util:get_value(Key, Unwrap, Default)\\n    end\\n  end,\\n\\n  Fun_helpers_error = fun(Message) ->\\n    throw({[{<<\\\"forbidden\\\">>, Fun_helpers_to_string(Message)}]})\\n  end,\\n\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Multisite\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_multisite_id_cut = fun(Id, Multisite) ->\\n    if Id /= null ->\\n      Type = re:replace(binary_to_list(Id), \\\"^([^\\\\/]*)\\\\/.*\\\", \\\"\\\\\\\\1\\\", [global, {return, list}]),\\n      Walker = fun([Key | Body], W) ->\\n        Match = re:run(binary_to_list(Id), couch_util:implode([Type, \\\"/\\\", binary_to_list(Key)], \\\"\\\"), [global]),\\n        Test = case Match of {match, _} -> true; _ -> false end,\\n        if Test == true ->\\n          Strip = re:replace(binary_to_list(Id), couch_util:implode([\\\"^\\\", Type, \\\"|\\\", binary_to_list(Key), \\\"\\\\/\\\"], \\\"\\\"), \\\"\\\", [global, {return, list}]),\\n          list_to_binary(couch_util:implode([Type, Strip], \\\"\\\"));\\n        true ->\\n          if length(Body) > 0 -> W(Body, W); true -> Id end\\n        end\\n      end,\\n  \\n      if length(Type) > 0 ->\\n        Keys = Fun_helpers_get(Multisite, [<<\\\"keys\\\">>], []),\\n        if length(Keys) > 0 -> Walker(Keys, Walker); true -> Id end;\\n      true -> Id end;\\n    true -> null end\\n  end,\\n\\n  Fun_multisite_id_add = fun(Id, Multisite, Site) ->\\n    if Id /= null ->\\n      Type = re:replace(binary_to_list(Id), \\\"^([^\\\\/]*)\\\\/.*\\\", \\\"\\\\\\\\1\\\", [global, {return, list}]),\\n      Walker = fun([Pattern | Body], Clear, Key, W) ->\\n        Match = re:run(Clear, binary_to_list(Pattern), [global]),\\n        Test = case Match of {match, _} -> true; _ -> false end,\\n        if Test == true ->\\n          if Key /= <<\\\"main\\\">> ->\\n            Strip = re:replace(Clear, couch_util:implode([\\\"^\\\", Type, \\\"\\\\/\\\"], \\\"\\\"), \\\"\\\", [{return, list}]),\\n            list_to_binary(couch_util:implode([Type, \\\"/\\\", binary_to_list(Key), \\\"/\\\", Strip], \\\"\\\"));\\n          true -> list_to_binary(Clear) end;\\n        true ->\\n          if length(Body) > 0 -> W(Body, Clear, Key, W); true -> Clear end\\n        end\\n      end,\\n  \\n      if length(Type) > 0 ->\\n        Cut = Fun_multisite_id_cut(Id, Multisite),\\n        Key = Fun_helpers_get(Site, [<<\\\"key\\\">>], <<\\\"main\\\">>),\\n        List = Fun_helpers_get(Site, [<<\\\"docs\\\">>], []),\\n        if length(List) > 0 -> Walker(List, binary_to_list(Cut), Key, Walker); true -> Cut end;\\n      true -> Id end;\\n    true -> null end\\n  end,\\n\\n  Fun_multisite_get_setting = fun(List, Id, Multisite, Site) ->\\n    if length(List) > 0 ->\\n      MultisiteKey = Fun_multisite_id_add(Id, Multisite, Site),\\n      MainKey = Fun_multisite_id_cut(Id, Multisite),\\n      MultisiteSetting = lists:filter(fun(Item) -> ItemKey = Fun_helpers_get(Item, [<<\\\"_id\\\">>], null), if ItemKey /= null -> if ItemKey == MultisiteKey -> true; true -> false end; true -> false end end, List),\\n      MainSetting = lists:filter(fun(Item) -> ItemKey = Fun_helpers_get(Item, [<<\\\"_id\\\">>], null), if ItemKey /= null -> if ItemKey == MainKey -> true; true -> false end; true -> false end end, List),\\n      if length(MultisiteSetting) > 0 -> [F | _] = MultisiteSetting, F; true -> if length(MainSetting) > 0 -> [F | _] = MainSetting, F; true -> null end end;\\n    true -> null end\\n  end,\\n\\n  Fun_multisite_get_all = fun(List) ->\\n    Keys = sets:to_list(sets:from_list(lists:map(fun(Item) -> Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"key\\\">>], <<\\\"main\\\">>) end, List))),\\n    Languages = sets:to_list(sets:from_list(lists:map(fun(Item) -> Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"language\\\">>], <<\\\"en\\\">>) end, List))),\\n    All = lists:map(fun(Item) -> {[{<<\\\"key\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"key\\\">>], <<\\\"main\\\">>)}, {<<\\\"domain\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"domain\\\">>], <<\\\"localhost\\\">>)}, {<<\\\"prefix\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"prefix\\\">>], <<\\\"\\\">>)}, {<<\\\"language\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"language\\\">>], <<\\\"en\\\">>)}, {<<\\\"aliases\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"aliases\\\">>], [])}, {<<\\\"docs\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"docs\\\">>], [])}]} end, List),\\n    {[{<<\\\"keys\\\">>, Keys}, {<<\\\"languages\\\">>, Languages}, {<<\\\"users\\\">>, []}, {<<\\\"sites\\\">>, All}]}\\n  end,\\n\\n  Fun_multisite_get_site = fun(Domain, Prefix, Multisite) ->\\n    MultisiteSites = Fun_helpers_get(Multisite, [<<\\\"sites\\\">>], []),\\n    MultisiteDomain = lists:filter(fun(Item) -> D = Fun_helpers_get(Item, [<<\\\"domain\\\">>], null), if D == Domain -> true; true -> false end end, MultisiteSites),\\n  \\n    GetMainSite = fun(SL) ->\\n      TL = lists:filter(fun(I) -> K = Fun_helpers_get(I, [<<\\\"key\\\">>], null), if K == <<\\\"main\\\">> -> true; true -> false end end, SL),\\n      if length(TL) > 0 -> [TF | _] = TL, TF; true ->\\n        {[{<<\\\"key\\\">>, <<\\\"main\\\">>}, {<<\\\"domain\\\">>, <<\\\"localhost\\\">>}, {<<\\\"prefix\\\">>, <<\\\"\\\">>}, {<<\\\"language\\\">>, <<\\\"ru\\\">>}, {<<\\\"aliases\\\">>, []}, {<<\\\"docs\\\">>, []}]}\\n      end\\n    end,\\n  \\n    if length(MultisiteDomain) > 0 ->\\n      if length(MultisiteDomain) == 1 -> [MF1 | _] = MultisiteDomain, MF1; true ->\\n        MultisitePrefix = lists:filter(fun(Item) -> P = Fun_helpers_get(Item, [<<\\\"prefix\\\">>], <<\\\"\\\">>), if P == Prefix -> true; true -> false end end, MultisiteDomain),\\n        if length(MultisitePrefix) > 0 -> [MF2 | _] = MultisitePrefix, MF2; true -> GetMainSite(MultisiteSites) end\\n      end;\\n    true ->\\n      GetMainSite(MultisiteSites)\\n    end\\n  end,\\n\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Couchdb\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_couchdb_get_doc = fun(Id) ->\\n    DesignUrl = if DEBUG == true -> couch_util:implode([binary_to_list(SERVER), \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", http_uri:encode(binary_to_list(Id))], \\\"\\\"); true -> couch_util:implode([\\\"http://\\\", binary_to_list(CONTAINER), \\\":5984\\\", \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", http_uri:encode(binary_to_list(Id))], \\\"\\\") end,\\n    case ibrowse:send_req(DesignUrl, [], get, [], [{connect_timeout, 60000}], 60000) of {ok, _, _, Body} -> couch_util:json_decode(Body); _ -> {[{}]} end\\n  end,\\n\\n  Fun_couchdb_put_doc = fun(DocObject) ->\\n    Id = Fun_helpers_get(DocObject, [<<\\\"_id\\\">>], null),\\n    Url = if DEBUG == true -> couch_util:implode([binary_to_list(SERVER), \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", http_uri:encode(binary_to_list(Id))], \\\"\\\"); true -> couch_util:implode([\\\"http://\\\", binary_to_list(CONTAINER), \\\":5984\\\", \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", http_uri:encode(binary_to_list(Id))], \\\"\\\") end,\\n    EncodeJson = couch_util:json_encode(DocObject),\\n  \\n    case ibrowse:send_req(Url, [{\\\"Content-Type\\\", \\\"application/json\\\"}], put, EncodeJson, [{connect_timeout, 60000}], 60000) of\\n      {ok, _, _, Body} -> try couch_util:json_decode(Body) catch _:_ -> {[]} end;\\n      Error -> Error\\n    end\\n  end,\\n\\n  Fun_couchdb_get_view = fun(View, Params) ->\\n    case string:split(View, \\\"/\\\", all) of\\n      [DesignName, DesignView] ->\\n        QueryString = case Params of\\n          {Unwrap} ->\\n            if length(Unwrap) > 0 -> couch_util:implode(lists:filter(fun(Item) ->\\n              if Item /= null -> true; true -> false end\\n            end, lists:map(fun(Item) ->\\n              case Item of\\n                {Key, Value} -> list_to_binary([binary_to_list(Key), \\\"=\\\", binary_to_list(Value)]);\\n                _ -> null\\n              end\\n            end, Unwrap)), \\\"&\\\");\\n              true -> \\\"\\\"\\n            end;\\n          _ -> \\\"\\\"\\n        end,\\n        DesignUrl = if DEBUG == true ->\\n          couch_util:implode([binary_to_list(SERVER), \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", \\\"_design\\\", \\\"/\\\", binary_to_list(DesignName), \\\"/\\\", \\\"_view\\\", \\\"/\\\", binary_to_list(DesignView), \\\"?\\\", QueryString], \\\"\\\");\\n        true ->\\n          couch_util:implode([\\\"http://\\\", binary_to_list(CONTAINER), \\\":5984\\\", \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", \\\"_design\\\", \\\"/\\\", binary_to_list(DesignName), \\\"/\\\", \\\"_view\\\", \\\"/\\\", binary_to_list(DesignView), \\\"?\\\", QueryString], \\\"\\\")\\n        end,\\n        case ibrowse:send_req(DesignUrl, [], get, [], [{connect_timeout, 60000}], 60000) of\\n          {ok, _, _, Body} -> couch_util:json_decode(Body);\\n          _ -> {[{}]}\\n        end;\\n      _ -> {[]}\\n    end\\n  end,\\n\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Functions\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n \\n  Fun_get_favicon_path = fun(Icon, Multisite, Site) ->\\n    Id = Fun_multisite_id_add(<<\\\"setting/favicon\\\">>, Multisite, Site),\\n    if <<\\\"setting/favicon\\\">> /= Id ->\\n      Key = Fun_helpers_get(Site, [<<\\\"key\\\">>], <<\\\"main\\\">>),\\n      if Key == <<\\\"main\\\">> -> Icon; true -> list_to_binary(couch_util:implode([\\\"/\\\", binary_to_list(Key), \\\"/\\\", binary_to_list(Icon)], \\\"\\\")) end;\\n    true -> Icon end\\n  end,\\n\\n  Fun_get_manifest = fun(DocData, Multisite, Site) ->\\n    {[\\n      {<<\\\"name\\\">>, Fun_helpers_get(DocData, [<<\\\"name\\\">>], <<\\\"iSite\\\">>)},\\n      {<<\\\"short_name\\\">>, Fun_helpers_get(DocData, [<<\\\"short\\\">>], <<\\\"iSite\\\">>)},\\n      {<<\\\"theme_color\\\">>, Fun_helpers_get(DocData, [<<\\\"main_color\\\">>], <<\\\"#000000\\\">>)},\\n      {<<\\\"background_color\\\">>, Fun_helpers_get(DocData, [<<\\\"background_color\\\">>], <<\\\"#fafafa\\\">>)},\\n      {<<\\\"display\\\">>, <<\\\"standalone\\\">>},\\n      {<<\\\"scope\\\">>, <<\\\"/\\\">>},\\n      {<<\\\"start_url\\\">>, <<\\\"/\\\">>},\\n      {<<\\\"icons\\\">>, [\\n        {[\\n          {<<\\\"src\\\">>, Fun_get_favicon_path(<<\\\"favicon.png\\\">>, Multisite, Site)},\\n          {<<\\\"sizes\\\">>, <<\\\"32x32\\\">>},\\n          {<<\\\"type\\\">>, <<\\\"image/png\\\">>}\\n        ]},\\n        {[\\n          {<<\\\"src\\\">>, Fun_get_favicon_path(<<\\\"favicon-96x96.png\\\">>, Multisite, Site)},\\n          {<<\\\"sizes\\\">>, <<\\\"96x96\\\">>},\\n          {<<\\\"type\\\">>, <<\\\"image/png\\\">>}\\n        ]},\\n        {[\\n          {<<\\\"src\\\">>, Fun_get_favicon_path(<<\\\"favicon-144x144.png\\\">>, Multisite, Site)},\\n          {<<\\\"sizes\\\">>, <<\\\"144x144\\\">>},\\n          {<<\\\"type\\\">>, <<\\\"image/png\\\">>}\\n        ]},\\n        {[\\n          {<<\\\"src\\\">>, Fun_get_favicon_path(<<\\\"favicon-192x192.png\\\">>, Multisite, Site)},\\n          {<<\\\"sizes\\\">>, <<\\\"192x192 512x512\\\">>},\\n          {<<\\\"type\\\">>, <<\\\"image/png\\\">>}\\n        ]}\\n      ]}\\n    ]}\\n  end,\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Main\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n\\n    Host = Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"X-Forwarded-Host\\\">>], Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"x-forwarded-host\\\">>], Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"Host\\\">>], Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"host\\\">>], null)))),\\n  Domain = if Host /= null -> re:replace(binary_to_list(Host), \\\"^(.*)\\\\:[0-9]*$\\\", \\\"\\\\\\\\1\\\", [{return, binary}]); true -> <<\\\"localhost\\\">> end,\\n  Prefix = Fun_helpers_get(Req, [<<\\\"query\\\">>, <<\\\"prefix\\\">>], <<\\\"\\\">>),\\n\\n  Request = Fun_couchdb_get_view(<<\\\"system/setting\\\">>, {[{<<\\\"include_docs\\\">>, <<\\\"true\\\">>}, {<<\\\"limit\\\">>, <<\\\"1000\\\">>}]}),\\n  Docs = Fun_helpers_get(Request, [<<\\\"rows\\\">>], []),\\n\\n  Sites = lists:filter(fun(Item) -> case Fun_helpers_get(Item, [<<\\\"type\\\">>], null) of <<\\\"site\\\">> -> true; _ -> false end end, lists:filter(fun(Item) -> if Item /= null -> true; true -> false end end, lists:map(fun(Item) -> Fun_helpers_get(Item, [<<\\\"doc\\\">>], null) end, Docs))),\\n  Multisite = Fun_multisite_get_all(Sites),\\n  Site = Fun_multisite_get_site(Domain, Prefix, Multisite),\\n  Settings = lists:filter(fun(Item) -> case Fun_multisite_id_cut(Fun_helpers_get(Item, [<<\\\"_id\\\">>], null), Multisite) of <<\\\"setting/main\\\">> -> true; _ -> false end end, lists:filter(fun(Item) -> if Item /= null -> true; true -> false end end, lists:map(fun(Item) -> Fun_helpers_get(Item, [<<\\\"doc\\\">>], null) end, Docs))),\\n  SettingDoc = Fun_multisite_get_setting(Settings, <<\\\"setting/main\\\">>, Multisite, Site),\\n\\n  Hash = if SettingDoc /= null -> Fun_helpers_get(SettingDoc, [<<\\\"_rev\\\">>], <<\\\"none\\\">>); true -> <<\\\"none\\\">> end,\\n  IfMatchHash = list_to_binary(couch_util:implode([\\\"\\\\\\\"\\\", binary_to_list(Hash), \\\"\\\\\\\"\\\"], \\\"\\\")),\\n  IfMatch = Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"If-None-Match\\\">>], Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"if-none-match\\\">>], <<\\\"\\\">>)),\\n\\n  if IfMatch == IfMatchHash ->\\n    {[\\n      {<<\\\"code\\\">>, 304},\\n      {<<\\\"body\\\">>, couch_util:json_encode({[]})},\\n      {<<\\\"headers\\\">>, {[\\n        {<<\\\"Content-Type\\\">>, <<\\\"application/json\\\">>}\\n      ]}}\\n    ]};\\n  true ->\\n    DataJson = if length(Settings) > 0 ->\\n      if SettingDoc /= null -> Fun_get_manifest(Fun_helpers_get(SettingDoc, [<<\\\"data\\\">>], {[]}), Multisite, Site); true -> Fun_get_manifest({[]}, Multisite, Site) end;\\n    true -> Fun_get_manifest({[]}, Multisite, Site) end,\\n\\n    {[\\n      {<<\\\"code\\\">>, 200},\\n      {<<\\\"body\\\">>, couch_util:json_encode(DataJson)},\\n      {<<\\\"headers\\\">>, {[\\n        {<<\\\"Content-Type\\\">>, <<\\\"application/json\\\">>},\\n        {<<\\\"ETag\\\">>, Hash}\\n      ]}}\\n    ]}\\n  end\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n\\nend.\">>},\n                                    {<<\"reset\">>,\n                                     <<\"fun(Doc, Req) ->\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Defines\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  DEBUG = false,\\n  SERVER = <<\\\"https://database.isite.app\\\">>,\\n  CONTAINER = <<\\\"database\\\">>,\\n  DATABASE = <<\\\"isite\\\">>,\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Helpers\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_helpers_set = fun(Data, Key, Append) ->\\n    if Append /= null -> couch_util:json_apply_field({Key, Append}, Data); true -> Data end\\n  end,\\n\\n  Fun_helpers_to_list = fun(Value) ->\\n    if is_binary(Value) -> binary_to_list(Value);\\n    is_integer(Value) -> integer_to_list(Value);\\n    is_float(Value) -> float_to_list(Value);\\n    is_tuple(Value) -> tuple_to_list(Value);\\n    is_boolean(Value) -> if Value == true -> \\\"true\\\"; true -> \\\"false\\\" end;\\n    is_atom(Value) -> atom_to_list(Value);\\n    true -> Value end\\n  end,\\n\\n  Fun_helpers_to_integer = fun(Value) ->\\n    if is_integer(Value) ->\\n      Value;\\n    true ->\\n      if is_binary(Value) ->\\n        if byte_size(Value) > 0 ->\\n          case re:run(binary_to_list(Value), \\\"[^0-9]\\\", [global]) of\\n            nomatch -> binary_to_integer(Value);\\n            _ -> 0\\n          end;\\n        true -> 0 end;\\n      true ->\\n        if is_list(Value) ->\\n          if length(Value) > 0 ->\\n            case re:run(Value, \\\"[^0-9]\\\", [global]) of\\n              nomatch -> list_to_integer(Value);\\n              _ -> 0\\n            end;\\n          true -> 0 end;\\n        true ->\\n          if is_float(Value) ->\\n            list_to_integer(float_to_list(Value, [{decimals, 0}]));\\n          true -> 0 end\\n        end\\n      end\\n    end\\n  end,\\n\\n  Fun_helpers_for_each = fun(Json, Fn) ->\\n    ForEachDeep = fun([Head | Body], Acc, D) ->\\n      Result = Fn(Head),\\n      Length = length(Body),\\n      if Length /= 0 ->\\n        D(Body, [Result | Acc], D);\\n        true -> lists:reverse([Result | Acc]) end\\n    end,\\n    JsonLength = length(Json),\\n    if JsonLength /= 0 ->\\n      ForEachDeep(Json, [], ForEachDeep);\\n      true -> null end\\n  end,\\n\\n  Fun_helpers_to_string = fun(Value) ->\\n    lists:flatten(io_lib:format(\\\"~p\\\", [Value]))\\n  end,\\n\\n  Fun_helpers_get = fun(Data, Keys, Default) ->\\n    if length(Keys) > 1 ->\\n      GetWalker = fun(Data, [Key | Keys], D) ->\\n        if (is_integer(Key)) ->\\n          if (is_list(Data)) and (Key =< length(Data)) ->\\n            Value = lists:nth(Key, Data),\\n            case length(Keys) == 0 of\\n              true -> case Value of null -> Default; _ -> Value end;\\n              _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n            end;\\n            true -> Default end;\\n          true ->\\n            {DataList} = Data,\\n            case couch_util:get_value(Key, DataList, null) of\\n              null -> Default;\\n              Value -> case length(Keys) == 0 of\\n                true -> case Value of null -> Default; _ -> Value end;\\n                _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n              end\\n            end\\n        end\\n      end,\\n      GetWalker(Data, Keys, GetWalker);\\n    true ->\\n      {Unwrap} = Data,\\n      [Key | _] = Keys,\\n      couch_util:get_value(Key, Unwrap, Default)\\n    end\\n  end,\\n\\n  Fun_helpers_error = fun(Message) ->\\n    throw({[{<<\\\"forbidden\\\">>, Fun_helpers_to_string(Message)}]})\\n  end,\\n\\n  Fun_helpers_no_cache_type_headers = fun(Type) ->\\n    {[{<<\\\"Content-Type\\\">>, Type}, {<<\\\"Cache-Control\\\">>, <<\\\"no-cache, no-store, must-revalidate\\\">>}, {<<\\\"Expires\\\">>, <<\\\"0\\\">>}, {<<\\\"Pragma\\\">>, <<\\\"no-cache\\\">>}]}\\n  end,\\n\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Cryptography\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_cryptography_string = fun(Length) ->\\n    AllowedChars = \\\"abcdefghiklmnopqrstvxyz0123456789\\\",\\n    R = lists:foldl(fun(_, Acc) ->\\n      [lists:nth(random:uniform(length(AllowedChars)), AllowedChars)] ++ Acc\\n    end, [], lists:seq(1, Length)),\\n    list_to_binary(R)\\n  end,\\n\\n  Fun_cryptography_hash = fun(Message) ->\\n    crypto:hash(sha512, Message)\\n  end,\\n\\n  Fun_cryptography_hex = fun(Message) ->\\n    L = binary_to_list(Message),\\n    LH0 = lists:map(fun(X) -> integer_to_list(X, 16) end, L),\\n    LH = lists:map(fun([X, Y]) -> [X, Y]; ([X]) -> [$0, X] end, LH0),\\n    list_to_binary(string:to_lower(lists:flatten(LH)))\\n  end,\\n\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Couchdb\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_couchdb_get_doc = fun(Id) ->\\n    DesignUrl = if DEBUG == true -> couch_util:implode([binary_to_list(SERVER), \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", http_uri:encode(binary_to_list(Id))], \\\"\\\"); true -> couch_util:implode([\\\"http://\\\", binary_to_list(CONTAINER), \\\":5984\\\", \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", http_uri:encode(binary_to_list(Id))], \\\"\\\") end,\\n    case ibrowse:send_req(DesignUrl, [], get, [], [{connect_timeout, 60000}], 60000) of {ok, _, _, Body} -> couch_util:json_decode(Body); _ -> {[{}]} end\\n  end,\\n\\n  Fun_couchdb_put_doc = fun(DocObject) ->\\n    Id = Fun_helpers_get(DocObject, [<<\\\"_id\\\">>], null),\\n    Url = if DEBUG == true -> couch_util:implode([binary_to_list(SERVER), \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", http_uri:encode(binary_to_list(Id))], \\\"\\\"); true -> couch_util:implode([\\\"http://\\\", binary_to_list(CONTAINER), \\\":5984\\\", \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", http_uri:encode(binary_to_list(Id))], \\\"\\\") end,\\n    EncodeJson = couch_util:json_encode(DocObject),\\n  \\n    case ibrowse:send_req(Url, [{\\\"Content-Type\\\", \\\"application/json\\\"}], put, EncodeJson, [{connect_timeout, 60000}], 60000) of\\n      {ok, _, _, Body} -> try couch_util:json_decode(Body) catch _:_ -> {[]} end;\\n      Error -> Error\\n    end\\n  end,\\n\\n  Fun_couchdb_get_view = fun(View, Params) ->\\n    case string:split(View, \\\"/\\\", all) of\\n      [DesignName, DesignView] ->\\n        QueryString = case Params of\\n          {Unwrap} ->\\n            if length(Unwrap) > 0 -> couch_util:implode(lists:filter(fun(Item) ->\\n              if Item /= null -> true; true -> false end\\n            end, lists:map(fun(Item) ->\\n              case Item of\\n                {Key, Value} -> list_to_binary([binary_to_list(Key), \\\"=\\\", binary_to_list(Value)]);\\n                _ -> null\\n              end\\n            end, Unwrap)), \\\"&\\\");\\n              true -> \\\"\\\"\\n            end;\\n          _ -> \\\"\\\"\\n        end,\\n        DesignUrl = if DEBUG == true ->\\n          couch_util:implode([binary_to_list(SERVER), \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", \\\"_design\\\", \\\"/\\\", binary_to_list(DesignName), \\\"/\\\", \\\"_view\\\", \\\"/\\\", binary_to_list(DesignView), \\\"?\\\", QueryString], \\\"\\\");\\n        true ->\\n          couch_util:implode([\\\"http://\\\", binary_to_list(CONTAINER), \\\":5984\\\", \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", \\\"_design\\\", \\\"/\\\", binary_to_list(DesignName), \\\"/\\\", \\\"_view\\\", \\\"/\\\", binary_to_list(DesignView), \\\"?\\\", QueryString], \\\"\\\")\\n        end,\\n        case ibrowse:send_req(DesignUrl, [], get, [], [{connect_timeout, 60000}], 60000) of\\n          {ok, _, _, Body} -> couch_util:json_decode(Body);\\n          _ -> {[{}]}\\n        end;\\n      _ -> {[]}\\n    end\\n  end,\\n\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Functions\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n \\n  Fun_get_js_code = fun(Hash, Pwa, Database, Prefix) ->\\n    Data = [\\\"window['reset_data'] = {hash: '\\\", Hash, \\\"', pwa: \\\", Pwa, \\\", db_name: '\\\", Database, \\\"', db_prefix: '\\\", Prefix, \\\"'};\\\"],\\n  \\n    %% language=JavaScript\\n    list_to_binary([Data, \\\"\\n      const reset_data = window['reset_data'] || {};\\n  \\n      const hash = reset_data['hash'];\\n      const pwa = reset_data['pwa'];\\n      const db_name = reset_data['db_name'];\\n      const db_prefix = reset_data['db_prefix'];\\n  \\n      const hashes = [\\n        'a22e974764a9d808183b003dcfeeb8b5',\\n        '11a5e579413e4a17430cdfe3eb3ebad0',\\n        '37212cecacf75a5f1dd4dc0a68748f8a',\\n        '6eef79bca5d4004cfc31437b4d4d9301',\\n        '00d77d0a18d31aeb07a29593af8304ee',\\n        '7b2431b50de861f04e55936bc5d0672e',\\n        '1569aefb399bc57f1768ebcfdba9755d',\\n        '886e06edfcaf4bc9933a5477fe463299',\\n        '066fd3c9604ae12c153d4dcfa7cdea44',\\n        'f7ba98091ff0145de529241abfe5e3a5',\\n        'fc9d0defd47ad4d88cb1e356eb990830',\\n        '3937aa79dbb72ac55ac21c86bf683010',\\n        '9f8b11029b440fcdea698a7ebc6c184c',\\n        'b8061ee57e14b6366fdb5cb6f4e2fc93',\\n        'fdcfef103a9a5360508da3bc29441b6b',\\n        '0bfa9d7286bfdba0f55b0cf72c79c943',\\n  \\n        // old hashes\\n        'bb9810b3d68946317fa74ae2b86de7f7',\\n        'b1775763533d685c359a88a22c0ac90f',\\n        '0a96f015b07a6945e9c3d33aaf7dea2e',\\n        '33fef3813af93583b170a2219d354976',\\n        '16795cf1b9f45c17fa1d640e52963ed4'\\n      ];\\n      /**\\n       * @returns {Promise<any>}\\n       */\\n      function resetIndexedDB() {\\n        /**\\n         * @type {IDBFactory}\\n         */\\n        const indexedDB = window['indexedDB'] || window['mozIndexedDB'] || window['webkitIndexedDB'] || window['msIndexedDB'];\\n        if (indexedDB) {\\n          // for chrome\\n          if ('databases' in indexedDB) {\\n            /**\\n             * @type {Promise<{name: string, version: number}[]>}\\n             */\\n            return indexedDB.databases().then((r) => {\\n              /**\\n               * @type {Promise[]}\\n               */\\n              const responses = [];\\n              for (let i = 0; i < r.length; i++) {\\n                /**\\n                 * @type {{name: string, version: number}}\\n                 */\\n                const db = r[i];\\n                const reqResponse = new Promise(resolve => {\\n                  try {\\n                    const req = indexedDB.deleteDatabase(db.name);\\n                    req.onsuccess = () => resolve();\\n                    req.onerror = () => resolve();\\n                    req.onblocked = () => resolve();\\n                  } catch (e) {\\n                    console.error(e);\\n                    resolve();\\n                  }\\n                });\\n                responses.push(reqResponse);\\n              }\\n              return Promise.all(responses);\\n            }).catch(e => console.error(e));\\n          } else {\\n            /**\\n             * @type {Promise[]}\\n             */\\n            const responses = [];\\n            const reqResponse = new Promise(resolve => {\\n              try {\\n                const name = ['', ...['pouch', 'isite', db_name, db_prefix].filter(k => !!k)].join('_');\\n                const req = indexedDB.deleteDatabase(name);\\n                req.onsuccess = () => resolve();\\n                req.onerror = () => resolve();\\n                req.onblocked = () => resolve();\\n              } catch (e) {\\n                console.error(e);\\n                resolve();\\n              }\\n            });\\n            responses.push(reqResponse);\\n            for (let i = 0; i < hashes.length; i ++) {\\n              const reqResponse = new Promise(resolve => {\\n                try {\\n                  const name = [...['', ...['pouch', 'isite', db_name, db_prefix].filter(k => !!k)].join('_'), 'mrview', hashes[i]].join('-');\\n                  const req = indexedDB.deleteDatabase(name);\\n                  req.onsuccess = () => resolve();\\n                  req.onerror = () => resolve();\\n                  req.onblocked = () => resolve();\\n                } catch (e) {\\n                  console.error(e);\\n                  resolve();\\n                }\\n              });\\n              responses.push(reqResponse);\\n            }\\n            return Promise.All(responses);\\n          }\\n        } else {\\n          return Promise.resolve();\\n        }\\n      }\\n  \\n      /**\\n       * @returns {Promise<any>}\\n       */\\n      function resetServiceWorkers() {\\n        if ('serviceWorker' in navigator) {\\n          /**\\n           *\\n           * @type {Promise<boolean>[]}\\n           */\\n          const unregisters = [];\\n          return navigator.serviceWorker.getRegistrations().then(list => {\\n            for (let i = 0; i < list.length; i ++) {\\n              /**\\n               * @type {ServiceWorkerRegistration}\\n               */\\n              const registration = list[i];\\n              unregisters.push(registration.unregister());\\n            }\\n            return Promise.all(unregisters);\\n          });\\n        } else {\\n          return Promise.resolve();\\n        }\\n      }\\n  \\n      /**\\n       * @returns {void}\\n       */\\n      function resetLocalStorage() {\\n        if ('localStorage' in window) {\\n          window.localStorage.clear();\\n        }\\n      }\\n  \\n      /**\\n       * @returns {void}\\n       */\\n      function resetCookies() {\\n        /**\\n         * @type {string[]}\\n         */\\n        const cookies = document.cookie.split(';');\\n        for (let i = 0; i < cookies.length; i++) {\\n          const cookie = cookies[i];\\n          const index = cookie.indexOf('=');\\n          const name = index > -1 ? cookie.substr(0, index) : cookie;\\n          document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT`;\\n          document.cookie = `${name}=;path=/;expires=Thu, 01 Jan 1970 00:00:00 GMT`;\\n        }\\n      }\\n  \\n      (async () => {\\n        if ('localStorage' in window) {\\n          async function reset() {\\n            window.localStorage.setItem('_isite_reset', 'stop');\\n            try {\\n              await resetServiceWorkers();\\n            } catch (e) {}\\n            try {\\n              await resetIndexedDB();\\n            } catch (e) {}\\n            try {\\n              await resetCookies();\\n            } catch (e) {}\\n            try {\\n              await resetLocalStorage();\\n            } catch (e) {}\\n  \\n            if (pwa) {\\n              if (db_prefix) {\\n                window.location.href = `/${db_prefix}/account`;\\n              } else {\\n                window.location.href = '/account';\\n              }\\n            } else if (localReload === 'reload') {\\n              window.location.reload();\\n            }\\n          }\\n  \\n          const timestamp = (new Date()).getTime();\\n          const localTimestamp = (window.localStorage.getItem('_isite_timestamp') || 0) * 1;\\n          const localRev = window.localStorage.getItem('_isite_rev');\\n          const localReload = window.localStorage.getItem('_isite_reload');\\n          const localDifference = timestamp - localTimestamp;\\n  \\n          if (localRev) {\\n            if (localRev !== hash || pwa === false || localDifference > 86400000) {\\n              await reset();\\n            }\\n          } else if (pwa) {\\n            window.localStorage.setItem('_isite_rev', hash);\\n            window.localStorage.setItem('_isite_timestamp', (timestamp + ''));\\n          }\\n  \\n          if (pwa) {\\n            window.localStorage.setItem('_isite_reload', 'reload');\\n  \\n            let focusState = true;\\n            let blurTimestamp = (new Date()).getTime();\\n            window.addEventListener('blur', () => {\\n              blurTimestamp = (new Date()).getTime();\\n              focusState = false;\\n            });\\n  \\n            window.addEventListener('focus', async () => {\\n              const focusTimestamp = (new Date()).getTime();\\n              if ((focusTimestamp - blurTimestamp) > 86400000) {\\n                await reset();\\n              } else {\\n                window.localStorage.setItem('_isite_timestamp', (focusTimestamp + ''));\\n              }\\n              focusState = true;\\n            });\\n  \\n            setInterval(() => {\\n              if (focusState) {\\n                const intervalTimestamp = (new Date()).getTime();\\n                window.localStorage.setItem('_isite_timestamp', (intervalTimestamp + ''));\\n              }\\n            }, 3000);\\n          }\\n        }\\n      })();\\n    \\\"])\\n  end,\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Main\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n\\n    Request = Fun_couchdb_get_view(<<\\\"system/reset\\\">>, {[{<<\\\"include_docs\\\">>, <<\\\"true\\\">>}, {<<\\\"limit\\\">>, <<\\\"100\\\">>}]}),\\n  Docs = Fun_helpers_get(Request, [<<\\\"rows\\\">>], []),\\n  Sum = list_to_binary(couch_util:implode(lists:map(fun(Item) -> Fun_helpers_get(Item, [<<\\\"_rev\\\">>], <<\\\"\\\">>) end, lists:filter(fun(Item) -> case Fun_helpers_get(Item, [<<\\\"type\\\">>], null) of <<\\\"site\\\">> -> false; _ -> true end end, lists:filter(fun(Item) -> if Item /= null -> true; true -> false end end, lists:map(fun(Item) -> Fun_helpers_get(Item, [<<\\\"doc\\\">>], null) end, Docs)))), \\\"\\\")),\\n  Hash = Fun_cryptography_hex(crypto:hash(sha, Sum)),\\n  IfMatchHash = list_to_binary(couch_util:implode([\\\"\\\\\\\"\\\", binary_to_list(Hash), \\\"\\\\\\\"\\\"], \\\"\\\")),\\n  IfMatch = Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"If-None-Match\\\">>], Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"if-none-match\\\">>], <<\\\"\\\">>)),\\n\\n  if IfMatch == IfMatchHash ->\\n    {[\\n      {<<\\\"code\\\">>, 304},\\n      {<<\\\"body\\\">>, <<\\\"\\\">>},\\n      {<<\\\"headers\\\">>, {[\\n        {<<\\\"Content-Type\\\">>, <<\\\"text/javascript;charset=utf-8\\\">>}\\n      ]}}\\n    ]};\\n  true ->\\n    Prefix = Fun_helpers_get(Req, [<<\\\"query\\\">>, <<\\\"prefix\\\">>], Fun_helpers_get(Req, [<<\\\"cookie\\\">>, <<\\\"prefix\\\">>], <<\\\"\\\">>)),\\n    Sites = lists:filter(fun(Item) -> case Fun_helpers_get(Item, [<<\\\"type\\\">>], null) of <<\\\"site\\\">> -> true; _ -> false end end, lists:filter(fun(Item) -> if Item /= null -> true; true -> false end end, lists:map(fun(Item) -> Fun_helpers_get(Item, [<<\\\"doc\\\">>], null) end, Docs))),\\n    ExistSites = lists:filter(fun(Site) -> SitePrefix = Fun_helpers_get(Site, [<<\\\"data\\\">>, <<\\\"prefix\\\">>], <<\\\"\\\">>), if SitePrefix == Prefix -> true; true -> false end end, Sites),\\n    if length(ExistSites) > 0 ->\\n      Database = Fun_helpers_get(Req, [<<\\\"info\\\">>, <<\\\"db_name\\\">>], <<\\\"local\\\">>),\\n      Pwa = case Fun_helpers_get(Req, [<<\\\"query\\\">>, <<\\\"pwa\\\">>], null) of null -> \\\"false\\\"; _ -> \\\"true\\\" end,\\n      {[\\n        {<<\\\"code\\\">>, 200},\\n        {<<\\\"body\\\">>, Fun_get_js_code(Hash, Pwa, Database, Prefix)},\\n        {<<\\\"headers\\\">>, {[\\n          {<<\\\"Content-Type\\\">>, <<\\\"text/javascript;charset=utf-8\\\">>},\\n          {<<\\\"ETag\\\">>, Hash}\\n        ]}}\\n      ]};\\n    true ->\\n      {[{<<\\\"code\\\">>, 500}, {<<\\\"body\\\">>, \\\"\\\"}, {<<\\\"headers\\\">>, Fun_helpers_no_cache_type_headers(<<\\\"text/javascript;charset=utf-8\\\">>)}]}\\n    end\\n  end\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n\\nend.\">>},\n                                    {<<\"robots\">>,\n                                     <<\"fun(Doc, Req) ->\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Defines\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  DEBUG = false,\\n  SERVER = <<\\\"https://database.isite.app\\\">>,\\n  CONTAINER = <<\\\"database\\\">>,\\n  DATABASE = <<\\\"isite\\\">>,\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Helpers\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_helpers_set = fun(Data, Key, Append) ->\\n    if Append /= null -> couch_util:json_apply_field({Key, Append}, Data); true -> Data end\\n  end,\\n\\n  Fun_helpers_to_list = fun(Value) ->\\n    if is_binary(Value) -> binary_to_list(Value);\\n    is_integer(Value) -> integer_to_list(Value);\\n    is_float(Value) -> float_to_list(Value);\\n    is_tuple(Value) -> tuple_to_list(Value);\\n    is_boolean(Value) -> if Value == true -> \\\"true\\\"; true -> \\\"false\\\" end;\\n    is_atom(Value) -> atom_to_list(Value);\\n    true -> Value end\\n  end,\\n\\n  Fun_helpers_to_integer = fun(Value) ->\\n    if is_integer(Value) ->\\n      Value;\\n    true ->\\n      if is_binary(Value) ->\\n        if byte_size(Value) > 0 ->\\n          case re:run(binary_to_list(Value), \\\"[^0-9]\\\", [global]) of\\n            nomatch -> binary_to_integer(Value);\\n            _ -> 0\\n          end;\\n        true -> 0 end;\\n      true ->\\n        if is_list(Value) ->\\n          if length(Value) > 0 ->\\n            case re:run(Value, \\\"[^0-9]\\\", [global]) of\\n              nomatch -> list_to_integer(Value);\\n              _ -> 0\\n            end;\\n          true -> 0 end;\\n        true ->\\n          if is_float(Value) ->\\n            list_to_integer(float_to_list(Value, [{decimals, 0}]));\\n          true -> 0 end\\n        end\\n      end\\n    end\\n  end,\\n\\n  Fun_helpers_for_each = fun(Json, Fn) ->\\n    ForEachDeep = fun([Head | Body], Acc, D) ->\\n      Result = Fn(Head),\\n      Length = length(Body),\\n      if Length /= 0 ->\\n        D(Body, [Result | Acc], D);\\n        true -> lists:reverse([Result | Acc]) end\\n    end,\\n    JsonLength = length(Json),\\n    if JsonLength /= 0 ->\\n      ForEachDeep(Json, [], ForEachDeep);\\n      true -> null end\\n  end,\\n\\n  Fun_helpers_to_string = fun(Value) ->\\n    lists:flatten(io_lib:format(\\\"~p\\\", [Value]))\\n  end,\\n\\n  Fun_helpers_get = fun(Data, Keys, Default) ->\\n    if length(Keys) > 1 ->\\n      GetWalker = fun(Data, [Key | Keys], D) ->\\n        if (is_integer(Key)) ->\\n          if (is_list(Data)) and (Key =< length(Data)) ->\\n            Value = lists:nth(Key, Data),\\n            case length(Keys) == 0 of\\n              true -> case Value of null -> Default; _ -> Value end;\\n              _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n            end;\\n            true -> Default end;\\n          true ->\\n            {DataList} = Data,\\n            case couch_util:get_value(Key, DataList, null) of\\n              null -> Default;\\n              Value -> case length(Keys) == 0 of\\n                true -> case Value of null -> Default; _ -> Value end;\\n                _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n              end\\n            end\\n        end\\n      end,\\n      GetWalker(Data, Keys, GetWalker);\\n    true ->\\n      {Unwrap} = Data,\\n      [Key | _] = Keys,\\n      couch_util:get_value(Key, Unwrap, Default)\\n    end\\n  end,\\n\\n  Fun_helpers_error = fun(Message) ->\\n    throw({[{<<\\\"forbidden\\\">>, Fun_helpers_to_string(Message)}]})\\n  end,\\n\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Multisite\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_multisite_id_cut = fun(Id, Multisite) ->\\n    if Id /= null ->\\n      Type = re:replace(binary_to_list(Id), \\\"^([^\\\\/]*)\\\\/.*\\\", \\\"\\\\\\\\1\\\", [global, {return, list}]),\\n      Walker = fun([Key | Body], W) ->\\n        Match = re:run(binary_to_list(Id), couch_util:implode([Type, \\\"/\\\", binary_to_list(Key)], \\\"\\\"), [global]),\\n        Test = case Match of {match, _} -> true; _ -> false end,\\n        if Test == true ->\\n          Strip = re:replace(binary_to_list(Id), couch_util:implode([\\\"^\\\", Type, \\\"|\\\", binary_to_list(Key), \\\"\\\\/\\\"], \\\"\\\"), \\\"\\\", [global, {return, list}]),\\n          list_to_binary(couch_util:implode([Type, Strip], \\\"\\\"));\\n        true ->\\n          if length(Body) > 0 -> W(Body, W); true -> Id end\\n        end\\n      end,\\n  \\n      if length(Type) > 0 ->\\n        Keys = Fun_helpers_get(Multisite, [<<\\\"keys\\\">>], []),\\n        if length(Keys) > 0 -> Walker(Keys, Walker); true -> Id end;\\n      true -> Id end;\\n    true -> null end\\n  end,\\n\\n  Fun_multisite_id_add = fun(Id, Multisite, Site) ->\\n    if Id /= null ->\\n      Type = re:replace(binary_to_list(Id), \\\"^([^\\\\/]*)\\\\/.*\\\", \\\"\\\\\\\\1\\\", [global, {return, list}]),\\n      Walker = fun([Pattern | Body], Clear, Key, W) ->\\n        Match = re:run(Clear, binary_to_list(Pattern), [global]),\\n        Test = case Match of {match, _} -> true; _ -> false end,\\n        if Test == true ->\\n          if Key /= <<\\\"main\\\">> ->\\n            Strip = re:replace(Clear, couch_util:implode([\\\"^\\\", Type, \\\"\\\\/\\\"], \\\"\\\"), \\\"\\\", [{return, list}]),\\n            list_to_binary(couch_util:implode([Type, \\\"/\\\", binary_to_list(Key), \\\"/\\\", Strip], \\\"\\\"));\\n          true -> list_to_binary(Clear) end;\\n        true ->\\n          if length(Body) > 0 -> W(Body, Clear, Key, W); true -> Clear end\\n        end\\n      end,\\n  \\n      if length(Type) > 0 ->\\n        Cut = Fun_multisite_id_cut(Id, Multisite),\\n        Key = Fun_helpers_get(Site, [<<\\\"key\\\">>], <<\\\"main\\\">>),\\n        List = Fun_helpers_get(Site, [<<\\\"docs\\\">>], []),\\n        if length(List) > 0 -> Walker(List, binary_to_list(Cut), Key, Walker); true -> Cut end;\\n      true -> Id end;\\n    true -> null end\\n  end,\\n\\n  Fun_multisite_get_setting = fun(List, Id, Multisite, Site) ->\\n    if length(List) > 0 ->\\n      MultisiteKey = Fun_multisite_id_add(Id, Multisite, Site),\\n      MainKey = Fun_multisite_id_cut(Id, Multisite),\\n      MultisiteSetting = lists:filter(fun(Item) -> ItemKey = Fun_helpers_get(Item, [<<\\\"_id\\\">>], null), if ItemKey /= null -> if ItemKey == MultisiteKey -> true; true -> false end; true -> false end end, List),\\n      MainSetting = lists:filter(fun(Item) -> ItemKey = Fun_helpers_get(Item, [<<\\\"_id\\\">>], null), if ItemKey /= null -> if ItemKey == MainKey -> true; true -> false end; true -> false end end, List),\\n      if length(MultisiteSetting) > 0 -> [F | _] = MultisiteSetting, F; true -> if length(MainSetting) > 0 -> [F | _] = MainSetting, F; true -> null end end;\\n    true -> null end\\n  end,\\n\\n  Fun_multisite_get_all = fun(List) ->\\n    Keys = sets:to_list(sets:from_list(lists:map(fun(Item) -> Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"key\\\">>], <<\\\"main\\\">>) end, List))),\\n    Languages = sets:to_list(sets:from_list(lists:map(fun(Item) -> Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"language\\\">>], <<\\\"en\\\">>) end, List))),\\n    All = lists:map(fun(Item) -> {[{<<\\\"key\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"key\\\">>], <<\\\"main\\\">>)}, {<<\\\"domain\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"domain\\\">>], <<\\\"localhost\\\">>)}, {<<\\\"prefix\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"prefix\\\">>], <<\\\"\\\">>)}, {<<\\\"language\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"language\\\">>], <<\\\"en\\\">>)}, {<<\\\"aliases\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"aliases\\\">>], [])}, {<<\\\"docs\\\">>, Fun_helpers_get(Item, [<<\\\"data\\\">>, <<\\\"docs\\\">>], [])}]} end, List),\\n    {[{<<\\\"keys\\\">>, Keys}, {<<\\\"languages\\\">>, Languages}, {<<\\\"users\\\">>, []}, {<<\\\"sites\\\">>, All}]}\\n  end,\\n\\n  Fun_multisite_get_site = fun(Domain, Prefix, Multisite) ->\\n    MultisiteSites = Fun_helpers_get(Multisite, [<<\\\"sites\\\">>], []),\\n    MultisiteDomain = lists:filter(fun(Item) -> D = Fun_helpers_get(Item, [<<\\\"domain\\\">>], null), if D == Domain -> true; true -> false end end, MultisiteSites),\\n  \\n    GetMainSite = fun(SL) ->\\n      TL = lists:filter(fun(I) -> K = Fun_helpers_get(I, [<<\\\"key\\\">>], null), if K == <<\\\"main\\\">> -> true; true -> false end end, SL),\\n      if length(TL) > 0 -> [TF | _] = TL, TF; true ->\\n        {[{<<\\\"key\\\">>, <<\\\"main\\\">>}, {<<\\\"domain\\\">>, <<\\\"localhost\\\">>}, {<<\\\"prefix\\\">>, <<\\\"\\\">>}, {<<\\\"language\\\">>, <<\\\"ru\\\">>}, {<<\\\"aliases\\\">>, []}, {<<\\\"docs\\\">>, []}]}\\n      end\\n    end,\\n  \\n    if length(MultisiteDomain) > 0 ->\\n      if length(MultisiteDomain) == 1 -> [MF1 | _] = MultisiteDomain, MF1; true ->\\n        MultisitePrefix = lists:filter(fun(Item) -> P = Fun_helpers_get(Item, [<<\\\"prefix\\\">>], <<\\\"\\\">>), if P == Prefix -> true; true -> false end end, MultisiteDomain),\\n        if length(MultisitePrefix) > 0 -> [MF2 | _] = MultisitePrefix, MF2; true -> GetMainSite(MultisiteSites) end\\n      end;\\n    true ->\\n      GetMainSite(MultisiteSites)\\n    end\\n  end,\\n\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Couchdb\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_couchdb_get_doc = fun(Id) ->\\n    DesignUrl = if DEBUG == true -> couch_util:implode([binary_to_list(SERVER), \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", http_uri:encode(binary_to_list(Id))], \\\"\\\"); true -> couch_util:implode([\\\"http://\\\", binary_to_list(CONTAINER), \\\":5984\\\", \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", http_uri:encode(binary_to_list(Id))], \\\"\\\") end,\\n    case ibrowse:send_req(DesignUrl, [], get, [], [{connect_timeout, 60000}], 60000) of {ok, _, _, Body} -> couch_util:json_decode(Body); _ -> {[{}]} end\\n  end,\\n\\n  Fun_couchdb_put_doc = fun(DocObject) ->\\n    Id = Fun_helpers_get(DocObject, [<<\\\"_id\\\">>], null),\\n    Url = if DEBUG == true -> couch_util:implode([binary_to_list(SERVER), \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", http_uri:encode(binary_to_list(Id))], \\\"\\\"); true -> couch_util:implode([\\\"http://\\\", binary_to_list(CONTAINER), \\\":5984\\\", \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", http_uri:encode(binary_to_list(Id))], \\\"\\\") end,\\n    EncodeJson = couch_util:json_encode(DocObject),\\n  \\n    case ibrowse:send_req(Url, [{\\\"Content-Type\\\", \\\"application/json\\\"}], put, EncodeJson, [{connect_timeout, 60000}], 60000) of\\n      {ok, _, _, Body} -> try couch_util:json_decode(Body) catch _:_ -> {[]} end;\\n      Error -> Error\\n    end\\n  end,\\n\\n  Fun_couchdb_get_view = fun(View, Params) ->\\n    case string:split(View, \\\"/\\\", all) of\\n      [DesignName, DesignView] ->\\n        QueryString = case Params of\\n          {Unwrap} ->\\n            if length(Unwrap) > 0 -> couch_util:implode(lists:filter(fun(Item) ->\\n              if Item /= null -> true; true -> false end\\n            end, lists:map(fun(Item) ->\\n              case Item of\\n                {Key, Value} -> list_to_binary([binary_to_list(Key), \\\"=\\\", binary_to_list(Value)]);\\n                _ -> null\\n              end\\n            end, Unwrap)), \\\"&\\\");\\n              true -> \\\"\\\"\\n            end;\\n          _ -> \\\"\\\"\\n        end,\\n        DesignUrl = if DEBUG == true ->\\n          couch_util:implode([binary_to_list(SERVER), \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", \\\"_design\\\", \\\"/\\\", binary_to_list(DesignName), \\\"/\\\", \\\"_view\\\", \\\"/\\\", binary_to_list(DesignView), \\\"?\\\", QueryString], \\\"\\\");\\n        true ->\\n          couch_util:implode([\\\"http://\\\", binary_to_list(CONTAINER), \\\":5984\\\", \\\"/\\\", binary_to_list(DATABASE), \\\"/\\\", \\\"_design\\\", \\\"/\\\", binary_to_list(DesignName), \\\"/\\\", \\\"_view\\\", \\\"/\\\", binary_to_list(DesignView), \\\"?\\\", QueryString], \\\"\\\")\\n        end,\\n        case ibrowse:send_req(DesignUrl, [], get, [], [{connect_timeout, 60000}], 60000) of\\n          {ok, _, _, Body} -> couch_util:json_decode(Body);\\n          _ -> {[{}]}\\n        end;\\n      _ -> {[]}\\n    end\\n  end,\\n\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Functions\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n \\n  Fun_get_robots = fun(DocData) ->\\n    if DocData /= null -> Fun_helpers_get(DocData, [<<\\\"robots\\\">>], <<\\\"User-agent: *\\\\nDisallow: /\\\">>); true -> <<\\\"User-agent: *\\\\nDisallow: /\\\">> end\\n  end,\\n\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Main\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n\\n    Host = Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"X-Forwarded-Host\\\">>], Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"x-forwarded-host\\\">>], Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"Host\\\">>], Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"host\\\">>], null)))),\\n  Domain = if Host /= null -> re:replace(binary_to_list(Host), \\\"^(.*)\\\\:[0-9]*$\\\", \\\"\\\\\\\\1\\\", [{return, binary}]); true -> <<\\\"localhost\\\">> end,\\n  Prefix = Fun_helpers_get(Req, [<<\\\"query\\\">>, <<\\\"prefix\\\">>], <<\\\"\\\">>),\\n\\n  Request = Fun_couchdb_get_view(<<\\\"system/setting\\\">>, {[{<<\\\"include_docs\\\">>, <<\\\"true\\\">>}, {<<\\\"limit\\\">>, <<\\\"1000\\\">>}]}),\\n  Docs = Fun_helpers_get(Request, [<<\\\"rows\\\">>], []),\\n\\n  Sites = lists:filter(fun(Item) -> case Fun_helpers_get(Item, [<<\\\"type\\\">>], null) of <<\\\"site\\\">> -> true; _ -> false end end, lists:filter(fun(Item) -> if Item /= null -> true; true -> false end end, lists:map(fun(Item) -> Fun_helpers_get(Item, [<<\\\"doc\\\">>], null) end, Docs))),\\n  Multisite = Fun_multisite_get_all(Sites),\\n  Site = Fun_multisite_get_site(Domain, Prefix, Multisite),\\n  Settings = lists:filter(fun(Item) -> case Fun_multisite_id_cut(Fun_helpers_get(Item, [<<\\\"_id\\\">>], null), Multisite) of <<\\\"setting/seo\\\">> -> true; _ -> false end end, lists:filter(fun(Item) -> if Item /= null -> true; true -> false end end, lists:map(fun(Item) -> Fun_helpers_get(Item, [<<\\\"doc\\\">>], null) end, Docs))),\\n  SettingDoc = Fun_multisite_get_setting(Settings, <<\\\"setting/seo\\\">>, Multisite, Site),\\n\\n  Hash = if SettingDoc /= null -> Fun_helpers_get(SettingDoc, [<<\\\"_rev\\\">>], <<\\\"none\\\">>); true -> <<\\\"none\\\">> end,\\n  IfMatchHash = list_to_binary(couch_util:implode([\\\"\\\\\\\"\\\", binary_to_list(Hash), \\\"\\\\\\\"\\\"], \\\"\\\")),\\n  IfMatch = Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"If-None-Match\\\">>], Fun_helpers_get(Req, [<<\\\"headers\\\">>, <<\\\"if-none-match\\\">>], <<\\\"\\\">>)),\\n\\n  if IfMatch == IfMatchHash ->\\n    {[\\n      {<<\\\"code\\\">>, 304},\\n      {<<\\\"body\\\">>, <<\\\"\\\">>},\\n      {<<\\\"headers\\\">>, {[\\n        {<<\\\"Content-Type\\\">>, <<\\\"text/plain\\\">>}\\n      ]}}\\n    ]};\\n  true ->\\n    SeoTxt = if length(Settings) > 0 ->\\n      if SettingDoc /= null -> Fun_get_robots(Fun_helpers_get(SettingDoc, [<<\\\"data\\\">>], null)); true -> Fun_get_robots(null) end;\\n    true -> Fun_get_robots(null) end,\\n\\n    {[\\n      {<<\\\"code\\\">>, 200},\\n      {<<\\\"body\\\">>, SeoTxt},\\n      {<<\\\"headers\\\">>, {[\\n        {<<\\\"Content-Type\\\">>, <<\\\"text/plain\\\">>},\\n        {<<\\\"ETag\\\">>, Hash}\\n      ]}}\\n    ]}\\n  end\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n\\nend.\">>},\n                                    {<<\"tags\">>,\n                                     <<\"fun(Doc, Req) ->\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Helpers\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_helpers_set = fun(Data, Key, Append) ->\\n    if Append /= null -> couch_util:json_apply_field({Key, Append}, Data); true -> Data end\\n  end,\\n\\n  Fun_helpers_to_list = fun(Value) ->\\n    if is_binary(Value) -> binary_to_list(Value);\\n    is_integer(Value) -> integer_to_list(Value);\\n    is_float(Value) -> float_to_list(Value);\\n    is_tuple(Value) -> tuple_to_list(Value);\\n    is_boolean(Value) -> if Value == true -> \\\"true\\\"; true -> \\\"false\\\" end;\\n    is_atom(Value) -> atom_to_list(Value);\\n    true -> Value end\\n  end,\\n\\n  Fun_helpers_to_integer = fun(Value) ->\\n    if is_integer(Value) ->\\n      Value;\\n    true ->\\n      if is_binary(Value) ->\\n        if byte_size(Value) > 0 ->\\n          case re:run(binary_to_list(Value), \\\"[^0-9]\\\", [global]) of\\n            nomatch -> binary_to_integer(Value);\\n            _ -> 0\\n          end;\\n        true -> 0 end;\\n      true ->\\n        if is_list(Value) ->\\n          if length(Value) > 0 ->\\n            case re:run(Value, \\\"[^0-9]\\\", [global]) of\\n              nomatch -> list_to_integer(Value);\\n              _ -> 0\\n            end;\\n          true -> 0 end;\\n        true ->\\n          if is_float(Value) ->\\n            list_to_integer(float_to_list(Value, [{decimals, 0}]));\\n          true -> 0 end\\n        end\\n      end\\n    end\\n  end,\\n\\n  Fun_helpers_for_each = fun(Json, Fn) ->\\n    ForEachDeep = fun([Head | Body], Acc, D) ->\\n      Result = Fn(Head),\\n      Length = length(Body),\\n      if Length /= 0 ->\\n        D(Body, [Result | Acc], D);\\n        true -> lists:reverse([Result | Acc]) end\\n    end,\\n    JsonLength = length(Json),\\n    if JsonLength /= 0 ->\\n      ForEachDeep(Json, [], ForEachDeep);\\n      true -> null end\\n  end,\\n\\n  Fun_helpers_to_string = fun(Value) ->\\n    lists:flatten(io_lib:format(\\\"~p\\\", [Value]))\\n  end,\\n\\n  Fun_helpers_get = fun(Data, Keys, Default) ->\\n    if length(Keys) > 1 ->\\n      GetWalker = fun(Data, [Key | Keys], D) ->\\n        if (is_integer(Key)) ->\\n          if (is_list(Data)) and (Key =< length(Data)) ->\\n            Value = lists:nth(Key, Data),\\n            case length(Keys) == 0 of\\n              true -> case Value of null -> Default; _ -> Value end;\\n              _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n            end;\\n            true -> Default end;\\n          true ->\\n            {DataList} = Data,\\n            case couch_util:get_value(Key, DataList, null) of\\n              null -> Default;\\n              Value -> case length(Keys) == 0 of\\n                true -> case Value of null -> Default; _ -> Value end;\\n                _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n              end\\n            end\\n        end\\n      end,\\n      GetWalker(Data, Keys, GetWalker);\\n    true ->\\n      {Unwrap} = Data,\\n      [Key | _] = Keys,\\n      couch_util:get_value(Key, Unwrap, Default)\\n    end\\n  end,\\n\\n  Fun_helpers_error = fun(Message) ->\\n    throw({[{<<\\\"forbidden\\\">>, Fun_helpers_to_string(Message)}]})\\n  end,\\n\\n \\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Main\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n\\n    Param = Fun_helpers_get(Req, [<<\\\"query\\\">>, <<\\\"list\\\">>], null),\\n  Tag = Fun_helpers_get(Req, [<<\\\"query\\\">>, <<\\\"tag\\\">>], null),\\n\\n  Walker = fun([Rule | Body], Acc, List, W) ->\\n    {Key, Value} = Rule,\\n    Check = lists:any(fun(X) -> X == Key end, List),\\n    AppendAcc = if Check == true -> [Value]; true -> [] end,\\n    if length(Body) > 0 -> W(Body, lists:append(Acc, AppendAcc), List, W); true -> lists:append(Acc, AppendAcc) end\\n  end,\\n\\n  Styles = if Param /= null ->\\n    if Tag /= null ->\\n      ParamList = binary_to_list(Param),\\n      if length(ParamList) < 2048 ->\\n        if Doc /= null ->\\n          Data = Fun_helpers_get(Doc, [<<\\\"data\\\">>, Tag], null),\\n          if Data /= null ->\\n            List = lists:map(fun(Item) -> list_to_binary(Item) end, lists:filter(fun(Item) -> if length(Item) > 0 -> true; true -> false end end, lists:map(fun(Item) -> string:trim(Item) end, string:split(ParamList, \\\",\\\", all)))),\\n            if length(List) > 0 ->\\n              {Unwrap} = Data,\\n              Walker(Unwrap, [], List, Walker);\\n            true -> [] end;\\n          true -> [] end;\\n        true -> [] end;\\n      true -> [] end;\\n    true -> [] end;\\n  true -> [] end,\\n\\n  {[\\n    {<<\\\"body\\\">>, list_to_binary(Styles)},\\n    {<<\\\"headers\\\">>, {[\\n      {<<\\\"Content-Type\\\">>, <<\\\"text/css\\\">>},\\n      {<<\\\"Cache-Control\\\">>, <<\\\"max-age=315360000\\\">>}\\n    ]}}\\n  ]}\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n\\nend.\">>},\n                                    {<<\"visibility\">>,\n                                     <<\"fun(Doc, Req) ->\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Helpers\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n  Fun_helpers_set = fun(Data, Key, Append) ->\\n    if Append /= null -> couch_util:json_apply_field({Key, Append}, Data); true -> Data end\\n  end,\\n\\n  Fun_helpers_to_list = fun(Value) ->\\n    if is_binary(Value) -> binary_to_list(Value);\\n    is_integer(Value) -> integer_to_list(Value);\\n    is_float(Value) -> float_to_list(Value);\\n    is_tuple(Value) -> tuple_to_list(Value);\\n    is_boolean(Value) -> if Value == true -> \\\"true\\\"; true -> \\\"false\\\" end;\\n    is_atom(Value) -> atom_to_list(Value);\\n    true -> Value end\\n  end,\\n\\n  Fun_helpers_to_integer = fun(Value) ->\\n    if is_integer(Value) ->\\n      Value;\\n    true ->\\n      if is_binary(Value) ->\\n        if byte_size(Value) > 0 ->\\n          case re:run(binary_to_list(Value), \\\"[^0-9]\\\", [global]) of\\n            nomatch -> binary_to_integer(Value);\\n            _ -> 0\\n          end;\\n        true -> 0 end;\\n      true ->\\n        if is_list(Value) ->\\n          if length(Value) > 0 ->\\n            case re:run(Value, \\\"[^0-9]\\\", [global]) of\\n              nomatch -> list_to_integer(Value);\\n              _ -> 0\\n            end;\\n          true -> 0 end;\\n        true ->\\n          if is_float(Value) ->\\n            list_to_integer(float_to_list(Value, [{decimals, 0}]));\\n          true -> 0 end\\n        end\\n      end\\n    end\\n  end,\\n\\n  Fun_helpers_for_each = fun(Json, Fn) ->\\n    ForEachDeep = fun([Head | Body], Acc, D) ->\\n      Result = Fn(Head),\\n      Length = length(Body),\\n      if Length /= 0 ->\\n        D(Body, [Result | Acc], D);\\n        true -> lists:reverse([Result | Acc]) end\\n    end,\\n    JsonLength = length(Json),\\n    if JsonLength /= 0 ->\\n      ForEachDeep(Json, [], ForEachDeep);\\n      true -> null end\\n  end,\\n\\n  Fun_helpers_to_string = fun(Value) ->\\n    lists:flatten(io_lib:format(\\\"~p\\\", [Value]))\\n  end,\\n\\n  Fun_helpers_get = fun(Data, Keys, Default) ->\\n    if length(Keys) > 1 ->\\n      GetWalker = fun(Data, [Key | Keys], D) ->\\n        if (is_integer(Key)) ->\\n          if (is_list(Data)) and (Key =< length(Data)) ->\\n            Value = lists:nth(Key, Data),\\n            case length(Keys) == 0 of\\n              true -> case Value of null -> Default; _ -> Value end;\\n              _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n            end;\\n            true -> Default end;\\n          true ->\\n            {DataList} = Data,\\n            case couch_util:get_value(Key, DataList, null) of\\n              null -> Default;\\n              Value -> case length(Keys) == 0 of\\n                true -> case Value of null -> Default; _ -> Value end;\\n                _ -> case is_tuple(Value) or is_list(Value) of true -> D(Value, Keys, D); _ -> Default end\\n              end\\n            end\\n        end\\n      end,\\n      GetWalker(Data, Keys, GetWalker);\\n    true ->\\n      {Unwrap} = Data,\\n      [Key | _] = Keys,\\n      couch_util:get_value(Key, Unwrap, Default)\\n    end\\n  end,\\n\\n  Fun_helpers_error = fun(Message) ->\\n    throw({[{<<\\\"forbidden\\\">>, Fun_helpers_to_string(Message)}]})\\n  end,\\n\\n \\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n  %  Main\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\n\\n\\n    Param = Fun_helpers_get(Req, [<<\\\"query\\\">>, <<\\\"list\\\">>], null),\\n\\n  Walker = fun([Rule | Body], Acc, List, W) ->\\n    {Key, Value} = Rule,\\n    Check = lists:any(fun(X) -> X == Key end, List),\\n    AppendAcc = if Check == true -> [Value]; true -> [] end,\\n    if length(Body) > 0 -> W(Body, lists:append(Acc, AppendAcc), List, W); true -> lists:append(Acc, AppendAcc) end\\n  end,\\n\\n  Styles = if Param /= null ->\\n    ParamList = binary_to_list(Param),\\n    if length(ParamList) < 2048 ->\\n      if Doc /= null ->\\n        Data = Fun_helpers_get(Doc, [<<\\\"data\\\">>], null),\\n        if Data /= null ->\\n          List = lists:map(fun(Item) -> list_to_binary(Item) end, lists:filter(fun(Item) -> if length(Item) > 0 -> true; true -> false end end, lists:map(fun(Item) -> string:trim(Item) end, string:split(ParamList, \\\",\\\", all)))),\\n          if length(List) > 0 ->\\n            {Unwrap} = Data,\\n            Walker(Unwrap, [], List, Walker);\\n          true -> [] end;\\n        true -> [] end;\\n      true -> [] end;\\n    true -> [] end;\\n  true -> [] end,\\n\\n  {[\\n    {<<\\\"body\\\">>, list_to_binary(Styles)},\\n    {<<\\\"headers\\\">>, {[\\n      {<<\\\"Content-Type\\\">>, <<\\\"text/css\\\">>},\\n      {<<\\\"Cache-Control\\\">>, <<\\\"max-age=315360000\\\">>}\\n    ]}}\\n  ]}\\n  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\\n\\nend.\">>}]}}]}]}]}}","reason":"{gen_server,call,\n            [couch_proc_manager,\n             {ret_proc,{proc,<0.20685.0>,<<\"erlang\">>,\n                             #Ref<0.1341722884.3282567169.183135>,\n                             [{<<\"_design/export\">>,\n                               <<\"31-5d6f0e5fcf27eaaa59d2850dc438eaac\">>},\n                              {<<\"_design/assets\">>,\n                               <<\"35-9c0a5c82a290bcccb83dc2a4d7827521\">>}],\n                             {couch_native_process,prompt},\n                             {couch_native_process,set_timeout},\n                             {couch_native_process,stop}}},\n             infinity]}","ref":3576297573}
