Proper LaTeX3 syntax for usepackage - ProvidesPackage

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP












3














The MWE_1 defines a document command which in turn calls a cs_ macro. Both are defined in the document's preamble section sandwiched between ExplSyntaxOn ExplSyntaxOff statements, as is the declaration of the associated local and global variables. There seems to be little reason to define document commands for the purpose of using them in a single document, and no reason whatsoever to develop cs_ macros with that scope in mind, hence I usually work with a number of .sty files. For the purpose of demonstration let the preamble of MWE_1 be packaged in the file myCommandsAndMacros.sty which is headed with the instruction ProvidesPackagemyCommandsAndMacros and in MWE_2 loaded with the instruction usepackagemyCommandsAndMacros - not sure where in the distant past I gleaned this process from, but it works. To my surprise I now learn (see Part II in the LaTeX3 Interfaces document) that ProvidesPackage is an instruction that belongs to LaTeX2 (although it may be used by LaTeX3), but all attempts to modify the syntax I have been using to ProvidesExplPackagemyCommandsAndMacros fail with error !Paragraph ended before ProvidesExplPackage was complete.



MWE_1:



documentclassarticle
%-----------------------
usepackage[check-declarations,log-functions,enable-debug]expl3
% or: RequirePackage[check-declarations,log-functions,enable-debug]expl3
usepackagexparse
%-----------------------
ExplSyntaxOn
% Variable Declarations:
tl_new:N l_rn_auxOne_tl
int_new:N l_rn_auxOne_int
int_new:N g_rn_Result_int

cs_new:Npn rnUtils_Squared:n #1

group_begin:
int_set:Nn l_rn_auxOne_int #1
int_gset:Nn g_rn_Result_int int_eval:n l_rn_auxOne_int *l_rn_auxOne_int
group_end:
% rnUtils_Squared:n

NewDocumentCommandmyDocumentCommandO911Oabc

int_set:Nn l_rn_auxOne_int #1
rnUtils_Squared:n l_rn_auxOne_int
tl_set:Nn l_rn_auxOne_tl #2
int_use:N g_rn_Result_int,~tl_use:N l_rn_auxOne_tl
% myDocumentCommand

ExplSyntaxOff
%-----------------------
begindocument
myDocumentCommand[2][$alpha$]

myDocumentCommand
enddocument


MWE_2:



documentclassarticle
%-----------------------
usepackage[check-declarations,log-functions,enable-debug]expl3
% or: RequirePackage[check-declarations,log-functions,enable-debug]expl3
usepackagexparse
usepackagemyCommandsAndMacros
%-----------------------
begindocument
myDocumentCommand[2][$alpha$]

myDocumentCommand
enddocument


myCommandsAndMacros.sty



ProvidesPackagemyCommandsAndMacros
%ProvidesExplPackagemyCommandsAndMacros ==> ERROR
% ===========================================================
ExplSyntaxOn

% Variable Declarations:
tl_new:N l_rn_auxOne_tl
int_new:N l_rn_auxOne_int
int_new:N g_rn_Result_int

cs_new:Npn rnUtils_Squared:n #1

group_begin:
int_set:Nn l_rn_auxOne_int #1
int_gset:Nn g_rn_Result_int int_eval:n l_rn_auxOne_int *l_rn_auxOne_int
group_end:
% rnUtils_Squared:n

NewDocumentCommandmyDocumentCommandO911Oabc

int_set:Nn l_rn_auxOne_int #1
rnUtils_Squared:n l_rn_auxOne_int
tl_set:Nn l_rn_auxOne_tl #2
int_use:N g_rn_Result_int,~tl_use:N l_rn_auxOne_tl
% myDocumentCommand

ExplSyntaxOff









share|improve this question



















  • 2




    I don't know and I haven't read the question yet, but ExplSyntaxOn and Off is likely not needed in an expl package.
    – Manuel
    Dec 24 '18 at 6:31










  • If you use the L3 version, isn't expl syntax automatically toggled on?
    – Johannes_B
    Dec 24 '18 at 6:32






  • 2




    You need RequirePackageexpl3 ProvidesExplPackage .... And you probably also want to add RequirePackagexparse.
    – Henri Menke
    Dec 24 '18 at 6:43






  • 2




    ProvidesExplPackage takes four arguments: ProvidesExplPackage<package><date><version><description> not just one and an optional argument like ProvidesPackage<package>[<version and date info>]. Cf. also texdev.net/2011/12/11/…
    – moewe
    Dec 24 '18 at 6:58







  • 1




    Off-topic: you have non-expandable material, so you need cs_new_protected:Npn not cs_new:Npn.
    – Joseph Wright
    Dec 24 '18 at 8:02















3














The MWE_1 defines a document command which in turn calls a cs_ macro. Both are defined in the document's preamble section sandwiched between ExplSyntaxOn ExplSyntaxOff statements, as is the declaration of the associated local and global variables. There seems to be little reason to define document commands for the purpose of using them in a single document, and no reason whatsoever to develop cs_ macros with that scope in mind, hence I usually work with a number of .sty files. For the purpose of demonstration let the preamble of MWE_1 be packaged in the file myCommandsAndMacros.sty which is headed with the instruction ProvidesPackagemyCommandsAndMacros and in MWE_2 loaded with the instruction usepackagemyCommandsAndMacros - not sure where in the distant past I gleaned this process from, but it works. To my surprise I now learn (see Part II in the LaTeX3 Interfaces document) that ProvidesPackage is an instruction that belongs to LaTeX2 (although it may be used by LaTeX3), but all attempts to modify the syntax I have been using to ProvidesExplPackagemyCommandsAndMacros fail with error !Paragraph ended before ProvidesExplPackage was complete.



MWE_1:



documentclassarticle
%-----------------------
usepackage[check-declarations,log-functions,enable-debug]expl3
% or: RequirePackage[check-declarations,log-functions,enable-debug]expl3
usepackagexparse
%-----------------------
ExplSyntaxOn
% Variable Declarations:
tl_new:N l_rn_auxOne_tl
int_new:N l_rn_auxOne_int
int_new:N g_rn_Result_int

cs_new:Npn rnUtils_Squared:n #1

group_begin:
int_set:Nn l_rn_auxOne_int #1
int_gset:Nn g_rn_Result_int int_eval:n l_rn_auxOne_int *l_rn_auxOne_int
group_end:
% rnUtils_Squared:n

NewDocumentCommandmyDocumentCommandO911Oabc

int_set:Nn l_rn_auxOne_int #1
rnUtils_Squared:n l_rn_auxOne_int
tl_set:Nn l_rn_auxOne_tl #2
int_use:N g_rn_Result_int,~tl_use:N l_rn_auxOne_tl
% myDocumentCommand

ExplSyntaxOff
%-----------------------
begindocument
myDocumentCommand[2][$alpha$]

myDocumentCommand
enddocument


MWE_2:



documentclassarticle
%-----------------------
usepackage[check-declarations,log-functions,enable-debug]expl3
% or: RequirePackage[check-declarations,log-functions,enable-debug]expl3
usepackagexparse
usepackagemyCommandsAndMacros
%-----------------------
begindocument
myDocumentCommand[2][$alpha$]

myDocumentCommand
enddocument


myCommandsAndMacros.sty



ProvidesPackagemyCommandsAndMacros
%ProvidesExplPackagemyCommandsAndMacros ==> ERROR
% ===========================================================
ExplSyntaxOn

% Variable Declarations:
tl_new:N l_rn_auxOne_tl
int_new:N l_rn_auxOne_int
int_new:N g_rn_Result_int

cs_new:Npn rnUtils_Squared:n #1

group_begin:
int_set:Nn l_rn_auxOne_int #1
int_gset:Nn g_rn_Result_int int_eval:n l_rn_auxOne_int *l_rn_auxOne_int
group_end:
% rnUtils_Squared:n

NewDocumentCommandmyDocumentCommandO911Oabc

int_set:Nn l_rn_auxOne_int #1
rnUtils_Squared:n l_rn_auxOne_int
tl_set:Nn l_rn_auxOne_tl #2
int_use:N g_rn_Result_int,~tl_use:N l_rn_auxOne_tl
% myDocumentCommand

ExplSyntaxOff









share|improve this question



















  • 2




    I don't know and I haven't read the question yet, but ExplSyntaxOn and Off is likely not needed in an expl package.
    – Manuel
    Dec 24 '18 at 6:31










  • If you use the L3 version, isn't expl syntax automatically toggled on?
    – Johannes_B
    Dec 24 '18 at 6:32






  • 2




    You need RequirePackageexpl3 ProvidesExplPackage .... And you probably also want to add RequirePackagexparse.
    – Henri Menke
    Dec 24 '18 at 6:43






  • 2




    ProvidesExplPackage takes four arguments: ProvidesExplPackage<package><date><version><description> not just one and an optional argument like ProvidesPackage<package>[<version and date info>]. Cf. also texdev.net/2011/12/11/…
    – moewe
    Dec 24 '18 at 6:58







  • 1




    Off-topic: you have non-expandable material, so you need cs_new_protected:Npn not cs_new:Npn.
    – Joseph Wright
    Dec 24 '18 at 8:02













3












3








3







The MWE_1 defines a document command which in turn calls a cs_ macro. Both are defined in the document's preamble section sandwiched between ExplSyntaxOn ExplSyntaxOff statements, as is the declaration of the associated local and global variables. There seems to be little reason to define document commands for the purpose of using them in a single document, and no reason whatsoever to develop cs_ macros with that scope in mind, hence I usually work with a number of .sty files. For the purpose of demonstration let the preamble of MWE_1 be packaged in the file myCommandsAndMacros.sty which is headed with the instruction ProvidesPackagemyCommandsAndMacros and in MWE_2 loaded with the instruction usepackagemyCommandsAndMacros - not sure where in the distant past I gleaned this process from, but it works. To my surprise I now learn (see Part II in the LaTeX3 Interfaces document) that ProvidesPackage is an instruction that belongs to LaTeX2 (although it may be used by LaTeX3), but all attempts to modify the syntax I have been using to ProvidesExplPackagemyCommandsAndMacros fail with error !Paragraph ended before ProvidesExplPackage was complete.



MWE_1:



documentclassarticle
%-----------------------
usepackage[check-declarations,log-functions,enable-debug]expl3
% or: RequirePackage[check-declarations,log-functions,enable-debug]expl3
usepackagexparse
%-----------------------
ExplSyntaxOn
% Variable Declarations:
tl_new:N l_rn_auxOne_tl
int_new:N l_rn_auxOne_int
int_new:N g_rn_Result_int

cs_new:Npn rnUtils_Squared:n #1

group_begin:
int_set:Nn l_rn_auxOne_int #1
int_gset:Nn g_rn_Result_int int_eval:n l_rn_auxOne_int *l_rn_auxOne_int
group_end:
% rnUtils_Squared:n

NewDocumentCommandmyDocumentCommandO911Oabc

int_set:Nn l_rn_auxOne_int #1
rnUtils_Squared:n l_rn_auxOne_int
tl_set:Nn l_rn_auxOne_tl #2
int_use:N g_rn_Result_int,~tl_use:N l_rn_auxOne_tl
% myDocumentCommand

ExplSyntaxOff
%-----------------------
begindocument
myDocumentCommand[2][$alpha$]

myDocumentCommand
enddocument


MWE_2:



documentclassarticle
%-----------------------
usepackage[check-declarations,log-functions,enable-debug]expl3
% or: RequirePackage[check-declarations,log-functions,enable-debug]expl3
usepackagexparse
usepackagemyCommandsAndMacros
%-----------------------
begindocument
myDocumentCommand[2][$alpha$]

myDocumentCommand
enddocument


myCommandsAndMacros.sty



ProvidesPackagemyCommandsAndMacros
%ProvidesExplPackagemyCommandsAndMacros ==> ERROR
% ===========================================================
ExplSyntaxOn

% Variable Declarations:
tl_new:N l_rn_auxOne_tl
int_new:N l_rn_auxOne_int
int_new:N g_rn_Result_int

cs_new:Npn rnUtils_Squared:n #1

group_begin:
int_set:Nn l_rn_auxOne_int #1
int_gset:Nn g_rn_Result_int int_eval:n l_rn_auxOne_int *l_rn_auxOne_int
group_end:
% rnUtils_Squared:n

NewDocumentCommandmyDocumentCommandO911Oabc

int_set:Nn l_rn_auxOne_int #1
rnUtils_Squared:n l_rn_auxOne_int
tl_set:Nn l_rn_auxOne_tl #2
int_use:N g_rn_Result_int,~tl_use:N l_rn_auxOne_tl
% myDocumentCommand

ExplSyntaxOff









share|improve this question















The MWE_1 defines a document command which in turn calls a cs_ macro. Both are defined in the document's preamble section sandwiched between ExplSyntaxOn ExplSyntaxOff statements, as is the declaration of the associated local and global variables. There seems to be little reason to define document commands for the purpose of using them in a single document, and no reason whatsoever to develop cs_ macros with that scope in mind, hence I usually work with a number of .sty files. For the purpose of demonstration let the preamble of MWE_1 be packaged in the file myCommandsAndMacros.sty which is headed with the instruction ProvidesPackagemyCommandsAndMacros and in MWE_2 loaded with the instruction usepackagemyCommandsAndMacros - not sure where in the distant past I gleaned this process from, but it works. To my surprise I now learn (see Part II in the LaTeX3 Interfaces document) that ProvidesPackage is an instruction that belongs to LaTeX2 (although it may be used by LaTeX3), but all attempts to modify the syntax I have been using to ProvidesExplPackagemyCommandsAndMacros fail with error !Paragraph ended before ProvidesExplPackage was complete.



MWE_1:



documentclassarticle
%-----------------------
usepackage[check-declarations,log-functions,enable-debug]expl3
% or: RequirePackage[check-declarations,log-functions,enable-debug]expl3
usepackagexparse
%-----------------------
ExplSyntaxOn
% Variable Declarations:
tl_new:N l_rn_auxOne_tl
int_new:N l_rn_auxOne_int
int_new:N g_rn_Result_int

cs_new:Npn rnUtils_Squared:n #1

group_begin:
int_set:Nn l_rn_auxOne_int #1
int_gset:Nn g_rn_Result_int int_eval:n l_rn_auxOne_int *l_rn_auxOne_int
group_end:
% rnUtils_Squared:n

NewDocumentCommandmyDocumentCommandO911Oabc

int_set:Nn l_rn_auxOne_int #1
rnUtils_Squared:n l_rn_auxOne_int
tl_set:Nn l_rn_auxOne_tl #2
int_use:N g_rn_Result_int,~tl_use:N l_rn_auxOne_tl
% myDocumentCommand

ExplSyntaxOff
%-----------------------
begindocument
myDocumentCommand[2][$alpha$]

myDocumentCommand
enddocument


MWE_2:



documentclassarticle
%-----------------------
usepackage[check-declarations,log-functions,enable-debug]expl3
% or: RequirePackage[check-declarations,log-functions,enable-debug]expl3
usepackagexparse
usepackagemyCommandsAndMacros
%-----------------------
begindocument
myDocumentCommand[2][$alpha$]

myDocumentCommand
enddocument


myCommandsAndMacros.sty



ProvidesPackagemyCommandsAndMacros
%ProvidesExplPackagemyCommandsAndMacros ==> ERROR
% ===========================================================
ExplSyntaxOn

% Variable Declarations:
tl_new:N l_rn_auxOne_tl
int_new:N l_rn_auxOne_int
int_new:N g_rn_Result_int

cs_new:Npn rnUtils_Squared:n #1

group_begin:
int_set:Nn l_rn_auxOne_int #1
int_gset:Nn g_rn_Result_int int_eval:n l_rn_auxOne_int *l_rn_auxOne_int
group_end:
% rnUtils_Squared:n

NewDocumentCommandmyDocumentCommandO911Oabc

int_set:Nn l_rn_auxOne_int #1
rnUtils_Squared:n l_rn_auxOne_int
tl_set:Nn l_rn_auxOne_tl #2
int_use:N g_rn_Result_int,~tl_use:N l_rn_auxOne_tl
% myDocumentCommand

ExplSyntaxOff






expl3






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Dec 24 '18 at 8:01









Joseph Wright

202k21555882




202k21555882










asked Dec 24 '18 at 6:22









Reinhard Neuwirth

1,55111322




1,55111322







  • 2




    I don't know and I haven't read the question yet, but ExplSyntaxOn and Off is likely not needed in an expl package.
    – Manuel
    Dec 24 '18 at 6:31










  • If you use the L3 version, isn't expl syntax automatically toggled on?
    – Johannes_B
    Dec 24 '18 at 6:32






  • 2




    You need RequirePackageexpl3 ProvidesExplPackage .... And you probably also want to add RequirePackagexparse.
    – Henri Menke
    Dec 24 '18 at 6:43






  • 2




    ProvidesExplPackage takes four arguments: ProvidesExplPackage<package><date><version><description> not just one and an optional argument like ProvidesPackage<package>[<version and date info>]. Cf. also texdev.net/2011/12/11/…
    – moewe
    Dec 24 '18 at 6:58







  • 1




    Off-topic: you have non-expandable material, so you need cs_new_protected:Npn not cs_new:Npn.
    – Joseph Wright
    Dec 24 '18 at 8:02












  • 2




    I don't know and I haven't read the question yet, but ExplSyntaxOn and Off is likely not needed in an expl package.
    – Manuel
    Dec 24 '18 at 6:31










  • If you use the L3 version, isn't expl syntax automatically toggled on?
    – Johannes_B
    Dec 24 '18 at 6:32






  • 2




    You need RequirePackageexpl3 ProvidesExplPackage .... And you probably also want to add RequirePackagexparse.
    – Henri Menke
    Dec 24 '18 at 6:43






  • 2




    ProvidesExplPackage takes four arguments: ProvidesExplPackage<package><date><version><description> not just one and an optional argument like ProvidesPackage<package>[<version and date info>]. Cf. also texdev.net/2011/12/11/…
    – moewe
    Dec 24 '18 at 6:58







  • 1




    Off-topic: you have non-expandable material, so you need cs_new_protected:Npn not cs_new:Npn.
    – Joseph Wright
    Dec 24 '18 at 8:02







2




2




I don't know and I haven't read the question yet, but ExplSyntaxOn and Off is likely not needed in an expl package.
– Manuel
Dec 24 '18 at 6:31




I don't know and I haven't read the question yet, but ExplSyntaxOn and Off is likely not needed in an expl package.
– Manuel
Dec 24 '18 at 6:31












If you use the L3 version, isn't expl syntax automatically toggled on?
– Johannes_B
Dec 24 '18 at 6:32




If you use the L3 version, isn't expl syntax automatically toggled on?
– Johannes_B
Dec 24 '18 at 6:32




2




2




You need RequirePackageexpl3 ProvidesExplPackage .... And you probably also want to add RequirePackagexparse.
– Henri Menke
Dec 24 '18 at 6:43




You need RequirePackageexpl3 ProvidesExplPackage .... And you probably also want to add RequirePackagexparse.
– Henri Menke
Dec 24 '18 at 6:43




2




2




ProvidesExplPackage takes four arguments: ProvidesExplPackage<package><date><version><description> not just one and an optional argument like ProvidesPackage<package>[<version and date info>]. Cf. also texdev.net/2011/12/11/…
– moewe
Dec 24 '18 at 6:58





ProvidesExplPackage takes four arguments: ProvidesExplPackage<package><date><version><description> not just one and an optional argument like ProvidesPackage<package>[<version and date info>]. Cf. also texdev.net/2011/12/11/…
– moewe
Dec 24 '18 at 6:58





1




1




Off-topic: you have non-expandable material, so you need cs_new_protected:Npn not cs_new:Npn.
– Joseph Wright
Dec 24 '18 at 8:02




Off-topic: you have non-expandable material, so you need cs_new_protected:Npn not cs_new:Npn.
– Joseph Wright
Dec 24 '18 at 8:02










1 Answer
1






active

oldest

votes


















9














Unlike ProvidesPackage, which uses a single argument for several different pieces of data, ProvidesExplPackage has a separate argument for each. For example



RequirePackageexpl3
ProvidesExplPackage siunitx 2018-07-21 3.0.0-alpha
A comprehensive (SI) units package
% Here, `expl3` syntax is active





share|improve this answer




















    Your Answer








    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "85"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f467143%2fproper-latex3-syntax-for-usepackagename-of-sty-file-providespackagena%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    9














    Unlike ProvidesPackage, which uses a single argument for several different pieces of data, ProvidesExplPackage has a separate argument for each. For example



    RequirePackageexpl3
    ProvidesExplPackage siunitx 2018-07-21 3.0.0-alpha
    A comprehensive (SI) units package
    % Here, `expl3` syntax is active





    share|improve this answer

























      9














      Unlike ProvidesPackage, which uses a single argument for several different pieces of data, ProvidesExplPackage has a separate argument for each. For example



      RequirePackageexpl3
      ProvidesExplPackage siunitx 2018-07-21 3.0.0-alpha
      A comprehensive (SI) units package
      % Here, `expl3` syntax is active





      share|improve this answer























        9












        9








        9






        Unlike ProvidesPackage, which uses a single argument for several different pieces of data, ProvidesExplPackage has a separate argument for each. For example



        RequirePackageexpl3
        ProvidesExplPackage siunitx 2018-07-21 3.0.0-alpha
        A comprehensive (SI) units package
        % Here, `expl3` syntax is active





        share|improve this answer












        Unlike ProvidesPackage, which uses a single argument for several different pieces of data, ProvidesExplPackage has a separate argument for each. For example



        RequirePackageexpl3
        ProvidesExplPackage siunitx 2018-07-21 3.0.0-alpha
        A comprehensive (SI) units package
        % Here, `expl3` syntax is active






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Dec 24 '18 at 8:04









        Joseph Wright

        202k21555882




        202k21555882



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to TeX - LaTeX Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f467143%2fproper-latex3-syntax-for-usepackagename-of-sty-file-providespackagena%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown






            Popular posts from this blog

            How to check contact read email or not when send email to Individual?

            Bahrain

            Postfix configuration issue with fips on centos 7; mailgun relay